summaryrefslogtreecommitdiff
path: root/src/lib/dlt_filetransfer.c
diff options
context:
space:
mode:
authorAlexander Mohr <alexander.m.mohr@daimler.com>2021-07-29 12:55:23 +0200
committerSaya Sugiura <39760799+ssugiura@users.noreply.github.com>2021-08-06 14:08:23 +0900
commit5379928defc81fc3826d84a634893c27394da59f (patch)
treed060aeeab7dc6b1005fe339dc67e6836ac951ebd /src/lib/dlt_filetransfer.c
parent655f8caa782742ec1565dd8683422dce8fa3f29a (diff)
downloadDLT-daemon-5379928defc81fc3826d84a634893c27394da59f.tar.gz
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.
Diffstat (limited to 'src/lib/dlt_filetransfer.c')
-rw-r--r--src/lib/dlt_filetransfer.c6
1 files changed, 6 insertions, 0 deletions
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,