diff options
Diffstat (limited to 'archive-zip.c')
-rw-r--r-- | archive-zip.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/archive-zip.c b/archive-zip.c index b429a8d974..68df3d6440 100644 --- a/archive-zip.c +++ b/archive-zip.c @@ -545,9 +545,17 @@ static void write_zip_trailer(const unsigned char *sha1) write_or_die(1, sha1_to_hex(sha1), GIT_SHA1_HEXSZ); } -static void dos_time(time_t *time, int *dos_date, int *dos_time) +static void dos_time(timestamp_t *timestamp, int *dos_date, int *dos_time) { - struct tm *t = localtime(time); + time_t time; + struct tm *t; + + if (date_overflows(*timestamp)) + die("timestamp too large for this system: %"PRItime, + *timestamp); + time = (time_t)*timestamp; + t = localtime(&time); + *timestamp = time; *dos_date = t->tm_mday + (t->tm_mon + 1) * 32 + (t->tm_year + 1900 - 1980) * 512; |