@@ -20,14 +20,14 @@ import (
2020 "golang.org/x/sys/unix"
2121)
2222
23- type mkdirAllFunc func (t * testing.T , root , unsafePath string , mode int ) error
23+ type mkdirAllFunc func (t * testing.T , root , unsafePath string , mode os. FileMode ) error
2424
25- var mkdirAll_MkdirAll mkdirAllFunc = func (t * testing.T , root , unsafePath string , mode int ) error {
25+ var mkdirAll_MkdirAll mkdirAllFunc = func (t * testing.T , root , unsafePath string , mode os. FileMode ) error {
2626 // We can't check expectedPath here.
2727 return MkdirAll (root , unsafePath , mode )
2828}
2929
30- var mkdirAll_MkdirAllHandle mkdirAllFunc = func (t * testing.T , root , unsafePath string , mode int ) error {
30+ var mkdirAll_MkdirAllHandle mkdirAllFunc = func (t * testing.T , root , unsafePath string , mode os. FileMode ) error {
3131 // Same logic as MkdirAll.
3232 rootDir , err := os .OpenFile (root , unix .O_PATH | unix .O_DIRECTORY | unix .O_CLOEXEC , 0 )
3333 if err != nil {
@@ -55,7 +55,7 @@ var mkdirAll_MkdirAllHandle mkdirAllFunc = func(t *testing.T, root, unsafePath s
5555 return nil
5656}
5757
58- func checkMkdirAll (t * testing.T , mkdirAll mkdirAllFunc , root , unsafePath string , mode , expectedMode int , expectedErr error ) {
58+ func checkMkdirAll (t * testing.T , mkdirAll mkdirAllFunc , root , unsafePath string , mode os. FileMode , expectedMode int , expectedErr error ) {
5959 rootDir , err := os .OpenFile (root , unix .O_PATH | unix .O_DIRECTORY | unix .O_CLOEXEC , 0 )
6060 require .NoError (t , err )
6161 defer rootDir .Close ()
@@ -248,31 +248,36 @@ func TestMkdirAllHandle_AsRoot(t *testing.T) {
248248
249249func testMkdirAll_InvalidMode (t * testing.T , mkdirAll mkdirAllFunc ) {
250250 for _ , test := range []struct {
251- mode int
251+ mode os. FileMode
252252 expectedErr error
253253 }{
254- // os.FileMode bits are invalid.
255- {int (os .ModeDir | 0o777 ), errInvalidMode },
256- {int (os .ModeSticky | 0o777 ), errInvalidMode },
257- {int (os .ModeIrregular | 0o777 ), errInvalidMode },
254+ // unix.S_IS* bits are invalid.
255+ {unix .S_ISUID | 0o777 , errInvalidMode },
256+ {unix .S_ISGID | 0o777 , errInvalidMode },
257+ {unix .S_ISVTX | 0o777 , errInvalidMode },
258+ {unix .S_ISUID | unix .S_ISGID | unix .S_ISVTX | 0o777 , errInvalidMode },
258259 // unix.S_IFMT bits are also invalid.
259260 {unix .S_IFDIR | 0o777 , errInvalidMode },
260261 {unix .S_IFREG | 0o777 , errInvalidMode },
261262 {unix .S_IFIFO | 0o777 , errInvalidMode },
263+ // os.FileType bits are also invalid.
264+ {os .ModeDir | 0o777 , errInvalidMode },
265+ {os .ModeNamedPipe | 0o777 , errInvalidMode },
266+ {os .ModeIrregular | 0o777 , errInvalidMode },
262267 // suid/sgid bits are silently ignored by mkdirat and so we return an
263268 // error explicitly.
264- {unix . S_ISUID | 0o777 , errInvalidMode },
265- {unix . S_ISGID | 0o777 , errInvalidMode },
266- {unix . S_ISUID | unix . S_ISGID | unix . S_ISVTX | 0o777 , errInvalidMode },
269+ {os . ModeSetuid | 0o777 , errInvalidMode },
270+ {os . ModeSetgid | 0o777 , errInvalidMode },
271+ {os . ModeSetuid | os . ModeSetgid | os . ModeSticky | 0o777 , errInvalidMode },
267272 // Proper sticky bit should work.
268- {unix . S_ISVTX | 0o777 , nil },
273+ {os . ModeSticky | 0o777 , nil },
269274 // Regular mode bits.
270275 {0o777 , nil },
271276 {0o711 , nil },
272277 } {
273278 root := t .TempDir ()
274279 err := mkdirAll (t , root , "a/b/c" , test .mode )
275- assert .ErrorIsf (t , err , test .expectedErr , "mkdirall 0o% .3o" , test .mode )
280+ assert .ErrorIsf (t , err , test .expectedErr , "mkdirall %+ .3o (%s)" , test . mode , test .mode )
276281 }
277282}
278283
@@ -295,7 +300,7 @@ func newRacingMkdirMeta() *racingMkdirMeta {
295300 }
296301}
297302
298- func (m * racingMkdirMeta ) checkMkdirAllHandle_Racing (t * testing.T , root , unsafePath string , mode int , allowedErrs []error ) {
303+ func (m * racingMkdirMeta ) checkMkdirAllHandle_Racing (t * testing.T , root , unsafePath string , mode os. FileMode , allowedErrs []error ) {
299304 rootDir , err := os .OpenFile (root , unix .O_PATH | unix .O_DIRECTORY | unix .O_CLOEXEC , 0 )
300305 require .NoError (t , err , "open root" )
301306 defer rootDir .Close ()
0 commit comments