diff options
author | infirit <[email protected]> | 2014-11-19 16:40:15 +0100 |
---|---|---|
committer | infirit <[email protected]> | 2014-11-19 19:36:03 +0100 |
commit | 4951d61a5d544ac07d194194f789d6bdf6f7c835 (patch) | |
tree | 4be5bd3cc013faac68b2510989f6f34b07ae0187 /src | |
parent | cca09255880c19f1abb3008a2835aee5dfc7e80a (diff) | |
download | engrampa-4951d61a5d544ac07d194194f789d6bdf6f7c835.tar.bz2 engrampa-4951d61a5d544ac07d194194f789d6bdf6f7c835.tar.xz |
Prevent a NULL pointer deref in mktime_from_string().
It's possible to call mktime_from_string() with NULL arguments for day,
month and year. This would in turn lead to calling atoi(NULL), which
leads to a crash.
So instead fill in any NULL values with the corresponding unit from
Jan 1st 1970.
Based on FR commit: 2899c092f249a4fa822a896baf128b6c8c75b634
From: Jasper Lievisse Adriaanse <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/fr-command-rpm.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/src/fr-command-rpm.c b/src/fr-command-rpm.c index 6ac4aea..05dff90 100644 --- a/src/fr-command-rpm.c +++ b/src/fr-command-rpm.c @@ -62,23 +62,32 @@ mktime_from_string (char *month, tm.tm_mon = i; break; } - } - tm.tm_mday = atoi (mday); - if (strchr (year, ':') != NULL) { - char **fields = g_strsplit (year, ":", 2); - if (n_fields (fields) == 2) { - time_t now; - struct tm *now_tm; - - tm.tm_hour = atoi (fields[0]); - tm.tm_min = atoi (fields[1]); - - now = time(NULL); - now_tm = localtime (&now); - tm.tm_year = now_tm->tm_year; - } } else - tm.tm_year = atoi (year) - 1900; + tm.tm_mon = 0; + + if (mday != NULL) + tm.tm_mday = atoi (mday); + else + tm.tm_mday = 1; + + if (year != NULL) { + if (strchr (year, ':') != NULL) { + char **fields = g_strsplit (year, ":", 2); + if (n_fields (fields) == 2) { + time_t now; + struct tm *now_tm; + + tm.tm_hour = atoi (fields[0]); + tm.tm_min = atoi (fields[1]); + + now = time(NULL); + now_tm = localtime (&now); + tm.tm_year = now_tm->tm_year; + } + } else + tm.tm_year = atoi (year) - 1900; + } else + tm.tm_year = 70; return mktime (&tm); } |