diff options
author | Simon Brandner <simon.brandner@partner.bmw.de> | 2013-01-08 15:38:07 +0100 |
---|---|---|
committer | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2013-07-19 16:54:14 +0200 |
commit | 3774bc35a6491de7bd82e5f955b78f3a9ee70116 (patch) | |
tree | a80958e1347d9dc4ebd4406aa3265a1a77cc9200 /src/system/dlt-system-filetransfer.c | |
parent | a90c37bddb39572687d12d75e3ce5a5e8ecd6a71 (diff) | |
download | DLT-daemon-3774bc35a6491de7bd82e5f955b78f3a9ee70116.tar.gz |
fixed possible overflow in dlt-system-filetransfer and missing fclose in dlt_daemon_common
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Diffstat (limited to 'src/system/dlt-system-filetransfer.c')
-rw-r--r-- | src/system/dlt-system-filetransfer.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/system/dlt-system-filetransfer.c b/src/system/dlt-system-filetransfer.c index aeee540..1a6debf 100644 --- a/src/system/dlt-system-filetransfer.c +++ b/src/system/dlt-system-filetransfer.c @@ -295,7 +295,7 @@ int wait_for_files(FiletransferOptions opts) } int i = 0; - while(i<len) + while(i < (len-INOTIFY_SZ)) { struct inotify_event *ie = (struct inotify_event *)&buf[i]; if(ie->len > 0) @@ -307,12 +307,17 @@ int wait_for_files(FiletransferOptions opts) { if(ie->wd == ino.fd[j]) { - DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, found new file.")); - char *tosend = malloc(strlen(opts.Directory[j])+ie->len+1); - sprintf(tosend, "%s/%s", opts.Directory[j], ie->name); - send_one(tosend, opts, j); - free(tosend); - } + DLT_LOG(dltsystem, DLT_LOG_DEBUG, DLT_STRING("dlt-system-filetransfer, found new file.")); + if ((i + INOTIFY_SZ + ie->len) < INOTIFY_LEN){ + char *tosend = malloc(strlen(opts.Directory[j])+ie->len+1); + sprintf(tosend, "%s/%s", opts.Directory[j], ie->name); + send_one(tosend, opts, j); + free(tosend); + } + else{ + DLT_LOG(dltsystem, DLT_LOG_ERROR, DLT_STRING("dlt-system-filetransfer, filename out of bounds!.")); + } + } } } } |