Skip to content

Commit 92cf047

Browse files
Defensively trim suffix and prefix of | to prevent invalid attributes (Azure#21677)
* Defensively trim suffix and prefix of | to prevent invalid attributes * Added changelog * Adding test --------- Co-authored-by: Sourav Gupta <souravgupta@microsoft.com>
1 parent 36a6e2d commit 92cf047

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

sdk/storage/azfile/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
### Breaking Changes
88

99
### Bugs Fixed
10+
* Fixed a bug where the `x-ms-file-attributes` header could be set to contain invalid trailing or leading | characters.
1011

1112
### Other Changes
1213

sdk/storage/azfile/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "go",
44
"TagPrefix": "go/storage/azfile",
5-
"Tag": "go/storage/azfile_66b915bf67"
5+
"Tag": "go/storage/azfile_aafef7262b"
66
}

sdk/storage/azfile/directory/client_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,45 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateDeleteNonDefault() {
439439
testcommon.ValidateFileErrorCode(_require, err, fileerror.ResourceNotFound)
440440
}
441441

442+
func (d *DirectoryRecordedTestsSuite) TestDirCreateEmptyAttributes() {
443+
_require := require.New(d.T())
444+
testName := d.T().Name()
445+
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
446+
_require.NoError(err)
447+
448+
shareClient := testcommon.CreateNewShare(context.Background(), _require, testcommon.GenerateShareName(testName), svcClient)
449+
defer testcommon.DeleteShare(context.Background(), _require, shareClient)
450+
451+
dirName := testcommon.GenerateDirectoryName(testName)
452+
dirClient := testcommon.GetDirectoryClient(dirName, shareClient)
453+
454+
cResp, err := dirClient.Create(context.Background(), &directory.CreateOptions{
455+
FileSMBProperties: &file.SMBProperties{
456+
Attributes: &file.NTFSFileAttributes{},
457+
},
458+
})
459+
_require.NoError(err)
460+
_require.NotNil(cResp.FilePermissionKey)
461+
_require.Equal(cResp.Date.IsZero(), false)
462+
_require.NotNil(cResp.ETag)
463+
_require.Equal(cResp.LastModified.IsZero(), false)
464+
_require.NotNil(cResp.RequestID)
465+
466+
fileAttributes, err := file.ParseNTFSFileAttributes(cResp.FileAttributes)
467+
_require.NoError(err)
468+
_require.NotNil(fileAttributes)
469+
_require.True(fileAttributes.Directory)
470+
471+
gResp, err := dirClient.GetProperties(context.Background(), nil)
472+
_require.NoError(err)
473+
474+
fileAttributes2, err := file.ParseNTFSFileAttributes(gResp.FileAttributes)
475+
_require.NoError(err)
476+
_require.NotNil(fileAttributes2)
477+
_require.True(fileAttributes2.Directory)
478+
_require.EqualValues(fileAttributes, fileAttributes2)
479+
}
480+
442481
func (d *DirectoryRecordedTestsSuite) TestDirCreateNegativePermissions() {
443482
_require := require.New(d.T())
444483
testName := d.T().Name()

sdk/storage/azfile/internal/exported/smb_property.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ func FormatSMBProperties(sp *SMBProperties, isDir bool) (fileAttributes *string,
4646
// Directories need to have this attribute included, if setting any attributes.
4747
*fileAttributes += "|Directory"
4848
}
49+
*fileAttributes = strings.TrimPrefix(*fileAttributes, "|")
50+
*fileAttributes = strings.TrimSuffix(*fileAttributes, "|")
4951
}
5052

5153
creationTime = nil

0 commit comments

Comments
 (0)