Handle the invalid timestamp in zipfile
The month field is one based in the zipfile modification time. And it causes an overflow converting it to struct tm. Switch to type to signed integer to suppress the sub-overflow. Bug: 153882979 Test: parse the problematic zipfile Change-Id: Iaf47bcc7f83d61b18c9e7a98bb6ab3936c9257e3
This commit is contained in:
parent
0b708cba86
commit
426bf3a1f1
|
@ -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;
|
||||
|
|
|
@ -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 = {};
|
||||
|
||||
|
|
Loading…
Reference in New Issue