diff options
author | Tom Thorogood <me+google@tomthorogood.co.uk> | 2021-03-13 00:27:30 +1030 |
---|---|---|
committer | Emmanuel Odeke <emmanuel@orijtech.com> | 2021-04-03 20:16:00 +0000 |
commit | dac136f87b9d5fdda9b5c33dfa0f94dc8c9880c7 (patch) | |
tree | c94393d4fd1020b081d5985a27f7392a20307cd8 /src/archive | |
parent | 971c7154b04d8dd00da932a26ecb6bb8d8fc133d (diff) | |
download | go-dac136f87b9d5fdda9b5c33dfa0f94dc8c9880c7.tar.gz go-dac136f87b9d5fdda9b5c33dfa0f94dc8c9880c7.zip |
archive/zip: fix character device handling in fileModeToUnixMode
The switch case for fs.ModeDevice can only be reached for block devices
while character devices match fs.ModeDevice | fs.ModeCharDevice. This
would cause character devices to wrongly be reported as regular files.
This bug has existed since the switch was first introduced in CL 5624048.
Change-Id: Icdbedb015e5376b385b3115d2e4574daa052f796
Reviewed-on: https://go-review.googlesource.com/c/go/+/300891
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>
Diffstat (limited to 'src/archive')
-rw-r--r-- | src/archive/zip/struct.go | 8 | ||||
-rw-r--r-- | src/archive/zip/writer_test.go | 12 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/archive/zip/struct.go b/src/archive/zip/struct.go index 4dd29f35fa..3dc0c50122 100644 --- a/src/archive/zip/struct.go +++ b/src/archive/zip/struct.go @@ -341,11 +341,9 @@ func fileModeToUnixMode(mode fs.FileMode) uint32 { case fs.ModeSocket: m = s_IFSOCK case fs.ModeDevice: - if mode&fs.ModeCharDevice != 0 { - m = s_IFCHR - } else { - m = s_IFBLK - } + m = s_IFBLK + case fs.ModeDevice | fs.ModeCharDevice: + m = s_IFCHR } if mode&fs.ModeSetuid != 0 { m |= s_ISUID diff --git a/src/archive/zip/writer_test.go b/src/archive/zip/writer_test.go index 5985144e5c..3fa8bef055 100644 --- a/src/archive/zip/writer_test.go +++ b/src/archive/zip/writer_test.go @@ -57,6 +57,18 @@ var writeTests = []WriteTest{ Method: Deflate, Mode: 0755 | fs.ModeSymlink, }, + { + Name: "device", + Data: []byte("device file"), + Method: Deflate, + Mode: 0755 | fs.ModeDevice, + }, + { + Name: "chardevice", + Data: []byte("char device file"), + Method: Deflate, + Mode: 0755 | fs.ModeDevice | fs.ModeCharDevice, + }, } func TestWriter(t *testing.T) { |