mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
971c7154b0
commit
dac136f87b
2 changed files with 15 additions and 5 deletions
|
|
@ -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_IFCHR
|
|
||||||
} else {
|
|
||||||
m = s_IFBLK
|
m = s_IFBLK
|
||||||
}
|
case fs.ModeDevice | fs.ModeCharDevice:
|
||||||
|
m = s_IFCHR
|
||||||
}
|
}
|
||||||
if mode&fs.ModeSetuid != 0 {
|
if mode&fs.ModeSetuid != 0 {
|
||||||
m |= s_ISUID
|
m |= s_ISUID
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue