summaryrefslogtreecommitdiff
path: root/src/system
diff options
context:
space:
mode:
authorSimon Brandner <simon.brandner@partner.bmw.de>2013-01-08 15:38:07 +0100
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2013-07-19 16:54:14 +0200
commit3774bc35a6491de7bd82e5f955b78f3a9ee70116 (patch)
treea80958e1347d9dc4ebd4406aa3265a1a77cc9200 /src/system
parenta90c37bddb39572687d12d75e3ce5a5e8ecd6a71 (diff)
downloadDLT-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')
-rw-r--r--src/system/dlt-system-filetransfer.c19
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!."));
+ }
+ }
}
}
}