aboutsummaryrefslogtreecommitdiff
path: root/src/archive/zip/reader.go
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2018-02-23 15:08:11 -0800
committerJoe Tsai <joetsai@google.com>2018-02-23 23:48:32 +0000
commit9697a119e6af9fd08080e7765d8ba75d715117a6 (patch)
tree02fcf94d71667909d01918a774d4e783d4531083 /src/archive/zip/reader.go
parent804e3e565e98e1ff3a22eb354a473225f6dc7351 (diff)
downloadgo-9697a119e6af9fd08080e7765d8ba75d715117a6.tar.gz
go-9697a119e6af9fd08080e7765d8ba75d715117a6.zip
archive/zip: fix handling of Info-ZIP Unix extended timestamps
The Info-ZIP Unix1 extra field is specified as such: >>> Value Size Description ----- ---- ----------- 0x5855 Short tag for this extra block type ("UX") TSize Short total data size for this block AcTime Long time of last access (GMT/UTC) ModTime Long time of last modification (GMT/UTC) <<< The previous handling was incorrect in that it read the AcTime field instead of the ModTime field. The test-osx.zip test unfortunately locked in the wrong behavior. Manually parsing that ZIP file shows that the encoded MS-DOS date and time are 0x4b5f and 0xa97d, which corresponds with a date of 2017-10-31 21:11:58, which matches the correct mod time (off by 1 second due to MS-DOS timestamp resolution). Fixes #23901 Change-Id: I567824c66e8316b9acd103dbecde366874a4b7ef Reviewed-on: https://go-review.googlesource.com/96895 Run-TryBot: Joe Tsai <joetsai@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/archive/zip/reader.go')
-rw-r--r--src/archive/zip/reader.go8
1 files changed, 1 insertions, 7 deletions
diff --git a/src/archive/zip/reader.go b/src/archive/zip/reader.go
index 1563e74dfc..2444106ba6 100644
--- a/src/archive/zip/reader.go
+++ b/src/archive/zip/reader.go
@@ -366,7 +366,7 @@ parseExtras:
epoch := time.Date(1601, time.January, 1, 0, 0, 0, 0, time.UTC)
modified = time.Unix(epoch.Unix()+secs, nsecs)
}
- case unixExtraID:
+ case unixExtraID, infoZipUnixExtraID:
if len(fieldBuf) < 8 {
continue parseExtras
}
@@ -379,12 +379,6 @@ parseExtras:
}
ts := int64(fieldBuf.uint32()) // ModTime since Unix epoch
modified = time.Unix(ts, 0)
- case infoZipUnixExtraID:
- if len(fieldBuf) < 4 {
- continue parseExtras
- }
- ts := int64(fieldBuf.uint32()) // ModTime since Unix epoch
- modified = time.Unix(ts, 0)
}
}