Merge "[zip] Set all entry times before 1980 to 1980-01-01" into main

This commit is contained in:
Treehugger Robot 2023-09-07 18:54:47 +00:00 committed by Gerrit Code Review
commit 05a03698b7

View file

@ -363,13 +363,22 @@ void ZipEntry::setModWhen(time_t when)
struct tm tmResult; struct tm tmResult;
struct tm* ptm = localtime_r(&even, &tmResult); struct tm* ptm = localtime_r(&even, &tmResult);
int year; // The earliest valid time for ZIP file entries is 1980-01-01. See:
year = ptm->tm_year; // https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html.
if (year < 80) // Set any time before 1980 to 1980-01-01.
year = 80; if (ptm->tm_year < 80) {
ptm->tm_year = 80;
ptm->tm_mon = 0;
ptm->tm_mday = 1;
ptm->tm_hour = 0;
ptm->tm_min = 0;
ptm->tm_sec = 0;
}
uint16_t zdate = (year - 80) << 9 | (ptm->tm_mon+1) << 5 | ptm->tm_mday; uint16_t zdate = static_cast<uint16_t>(
uint16_t ztime = ptm->tm_hour << 11 | ptm->tm_min << 5 | ptm->tm_sec >> 1; (ptm->tm_year - 80) << 9 | (ptm->tm_mon + 1) << 5 | ptm->tm_mday);
uint16_t ztime = static_cast<uint16_t>(
ptm->tm_hour << 11 | ptm->tm_min << 5 | ptm->tm_sec >> 1);
mCDE.mLastModFileTime = mLFH.mLastModFileTime = ztime; mCDE.mLastModFileTime = mLFH.mLastModFileTime = ztime;
mCDE.mLastModFileDate = mLFH.mLastModFileDate = zdate; mCDE.mLastModFileDate = mLFH.mLastModFileDate = zdate;