androiddump: check return value of localtime() before dereference (CID 1400829).
authorDario Lombardo <lomato@gmail.com>
Thu, 20 Jul 2017 22:22:47 +0000 (00:22 +0200)
committerMichael Mann <mmann78@netscape.net>
Fri, 21 Jul 2017 12:41:52 +0000 (12:41 +0000)
Change-Id: I03c851e56f5bd967a35c668bcbc4e98170251b2c
Reviewed-on: https://code.wireshark.org/review/22750
Petri-Dish: Dario Lombardo <lomato@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
extcap/androiddump.c

index 1076b89e4669511941301e0709d1b878d191851a..168df1d95d713119c26fbf463e7bfc410c1508a6 100644 (file)
@@ -2091,7 +2091,7 @@ static int capture_android_logcat_text(char *interface, char *fifo,
 
         while (used_buffer_length > 0 && (pos = (char *) memchr(packet + exported_pdu_headers_size, '\n', used_buffer_length))) {
             int        ms;
-            struct tm  date;
+            struct tm* date;
             time_t     seconds;
             time_t     secs = 0;
             int        nsecs = 0;
@@ -2100,11 +2100,13 @@ static int capture_android_logcat_text(char *interface, char *fifo,
             length = (gssize)(pos - packet) + 1;
 
             t = time(NULL);
-            date = *localtime(&t);
-            if (6 == sscanf(packet + exported_pdu_headers_size, "%d-%d %d:%d:%d.%d", &date.tm_mon, &date.tm_mday, &date.tm_hour,
-                            &date.tm_min, &date.tm_sec, &ms)) {
-                date.tm_mon -= 1;
-                seconds = mktime(&date);
+            date = localtime(&t);
+            if (!date)
+                continue;
+            if (6 == sscanf(packet + exported_pdu_headers_size, "%d-%d %d:%d:%d.%d", &date->tm_mon, &date->tm_mday, &date->tm_hour,
+                            &date->tm_min, &date->tm_sec, &ms)) {
+                date->tm_mon -= 1;
+                seconds = mktime(date);
                 secs = (time_t) seconds;
                 nsecs = (int) (ms * 1e6);
             }