diff --git a/libziparchive/include/ziparchive/zip_archive.h b/libziparchive/include/ziparchive/zip_archive.h index 3d51de9c0..005d6977d 100644 --- a/libziparchive/include/ziparchive/zip_archive.h +++ b/libziparchive/include/ziparchive/zip_archive.h @@ -48,9 +48,10 @@ struct ZipEntryCommon { // Modification time. The zipfile format specifies // that the first two little endian bytes contain the time // and the last two little endian bytes contain the date. - // See `GetModificationTime`. + // See `GetModificationTime`. Use signed integer to avoid the + // sub-overflow. // TODO: should be overridden by extra time field, if present. - uint32_t mod_time; + int32_t mod_time; // Returns `mod_time` as a broken-down struct tm. struct tm GetModificationTime() const; diff --git a/libziparchive/zip_archive.cc b/libziparchive/zip_archive.cc index 7bf2120e2..014f88131 100644 --- a/libziparchive/zip_archive.cc +++ b/libziparchive/zip_archive.cc @@ -1570,6 +1570,7 @@ bool ZipArchive::InitializeCentralDirectory(off64_t cd_start_offset, size_t cd_s return true; } +// This function returns the embedded timestamp as is; and doesn't perform validations. tm ZipEntryCommon::GetModificationTime() const { tm t = {};