Skip to content
Snippets Groups Projects
Commit dac136f8 authored by Tom Thorogood's avatar Tom Thorogood Committed by Emmanuel Odeke
Browse files

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: default avatarIan Lance Taylor <iant@golang.org>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>
parent 971c7154
No related branches found
No related tags found
No related merge requests found
...@@ -341,11 +341,9 @@ func fileModeToUnixMode(mode fs.FileMode) uint32 { ...@@ -341,11 +341,9 @@ func fileModeToUnixMode(mode fs.FileMode) uint32 {
case fs.ModeSocket: case fs.ModeSocket:
m = s_IFSOCK m = s_IFSOCK
case fs.ModeDevice: case fs.ModeDevice:
if mode&fs.ModeCharDevice != 0 { m = s_IFBLK
m = s_IFCHR case fs.ModeDevice | fs.ModeCharDevice:
} else { m = s_IFCHR
m = s_IFBLK
}
} }
if mode&fs.ModeSetuid != 0 { if mode&fs.ModeSetuid != 0 {
m |= s_ISUID m |= s_ISUID
......
...@@ -57,6 +57,18 @@ var writeTests = []WriteTest{ ...@@ -57,6 +57,18 @@ var writeTests = []WriteTest{
Method: Deflate, Method: Deflate,
Mode: 0755 | fs.ModeSymlink, 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) { func TestWriter(t *testing.T) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment