From 8d96afd4fb266688e8f55db978d5bc9b3c380ca6 Mon Sep 17 00:00:00 2001 From: Hiltjo Posthuma Date: Fri, 15 Apr 2016 20:44:32 +0200 Subject: [PATCH] touch: make invalid date an error and fix uninitialised value reproduce: touch -t 12345678 mytralala would only give a warning and use uninitialised time values. The proper way is to treat it as an error. Clear the "struct tm" and kill some lines just in case. --- touch.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/touch.c b/touch.c index b957fa5..fca2f16 100644 --- a/touch.c +++ b/touch.c @@ -48,7 +48,7 @@ touch(const char *file) static time_t parsetime(char *str, time_t current) { - struct tm *cur, t; + struct tm *cur, t = { 0 }; int zulu = 0; char *format; size_t len = strlen(str); @@ -59,12 +59,10 @@ parsetime(char *str, time_t current) switch (len) { /* -t flag argument */ case 8: - t.tm_sec = 0; t.tm_year = cur->tm_year; format = "%m%d%H%M"; break; case 10: - t.tm_sec = 0; format = "%y%m%d%H%M"; break; case 11: @@ -72,7 +70,6 @@ parsetime(char *str, time_t current) format = "%m%d%H%M.%S"; break; case 12: - t.tm_sec = 0; format = "%Y%m%d%H%M"; break; case 13: @@ -98,7 +95,7 @@ parsetime(char *str, time_t current) } if (!strptime(str, format, &t)) - weprintf("strptime %s: Invalid date format\n", str); + eprintf("strptime %s: Invalid date format\n", str); if (zulu) { t.tm_hour += t.tm_gmtoff / 60; t.tm_gmtoff = 0;