From 5379928defc81fc3826d84a634893c27394da59f Mon Sep 17 00:00:00 2001 From: Alexander Mohr Date: Thu, 29 Jul 2021 12:55:23 +0200 Subject: file-transfer: Abort file transfer if get serial number failed If a file is deleted while a file transfer is ongoing, the file transfer tries to seek through the whole file. This is due to the fact the the file handle is held open. getFileSerialNumber is already validating the file by using stat. If this call returns a negative value, we know that a stat to the file is not possible anymore, therefore further reading can be aborted. --- src/lib/dlt_filetransfer.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/lib/dlt_filetransfer.c b/src/lib/dlt_filetransfer.c index 7508790..081893b 100644 --- a/src/lib/dlt_filetransfer.c +++ b/src/lib/dlt_filetransfer.c @@ -462,6 +462,7 @@ int dlt_user_log_file_header_alias(DltContext *fileContext, const char *filename DLT_STRING( "dlt_user_log_file_header_alias, Error getting serial number of file:"), DLT_STRING(filename)); + return DLT_FILETRANSFER_FILE_SERIAL_NUMBER; } uint32_t fsize = getFilesize(filename, &ok); @@ -633,6 +634,8 @@ int dlt_user_log_file_data(DltContext *fileContext, DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to get FileSerialNumber for: "), DLT_STRING(filename)); + fclose (file); + return DLT_FILETRANSFER_FILE_SERIAL_NUMBER; } DLT_LOG(*fileContext, DLT_LOG_INFO, @@ -661,6 +664,8 @@ int dlt_user_log_file_data(DltContext *fileContext, DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to get FileSerialNumber for: "), DLT_STRING(filename)); + fclose(file); + return DLT_FILETRANSFER_FILE_SERIAL_NUMBER; } DLT_LOG(*fileContext, DLT_LOG_INFO, @@ -705,6 +710,7 @@ int dlt_user_log_file_end(DltContext *fileContext, const char *filename, int del DLT_LOG(*fileContext, DLT_LOG_ERROR, DLT_STRING("failed to get FileSerialNumber for: "), DLT_STRING(filename)); + return DLT_FILETRANSFER_FILE_SERIAL_NUMBER; } DLT_LOG(*fileContext, DLT_LOG_INFO, -- cgit v1.2.1