Skip to content

Commit 071da4c

Browse files
eanovacarlossanlop
authored andcommitted
Verified the null checking in the extension methods. (dotnet#316)
* Verified the null checking in the extension methods. * Apply suggestions from code review Co-Authored-By: Carlos Sanchez Lopez <[email protected]> * Updated Test to check for named parameters. Removed additional braces * This fixes null checks in NetFX. Adds equivalent null checks to NetFX. Adds back Allman style braces.
1 parent 91a7174 commit 071da4c

File tree

3 files changed

+53
-4
lines changed

3 files changed

+53
-4
lines changed

src/libraries/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.cs

+36-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ public static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInf
2424
public static void SetAccessControl(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
2525
{
2626
if (directorySecurity == null)
27+
{
2728
throw new ArgumentNullException(nameof(directorySecurity));
29+
}
2830

2931
string fullPath = Path.GetFullPath(directoryInfo.FullName);
3032
directorySecurity.Persist(fullPath);
@@ -43,30 +45,56 @@ public static FileSecurity GetAccessControl(this FileInfo fileInfo, AccessContro
4345
public static void SetAccessControl(this FileInfo fileInfo, FileSecurity fileSecurity)
4446
{
4547
if (fileSecurity == null)
48+
{
4649
throw new ArgumentNullException(nameof(fileSecurity));
47-
50+
}
4851
string fullPath = Path.GetFullPath(fileInfo.FullName);
4952
// Appropriate security check should be done for us by FileSecurity.
5053
fileSecurity.Persist(fullPath);
5154
}
5255

56+
/// <summary>
57+
/// This extension method for FileStream returns a FileSecurity object containing security descriptors from the Access, Owner, and Group AccessControlSections.
58+
/// </summary>
59+
/// <param name="fileStream">An object that represents the file for retrieving security descriptors from</param>
60+
/// <exception cref="ArgumentNullException"><paramref name="fileStream" /> is <see langword="null" />.</exception>
61+
/// <exception cref="ObjectDisposedException">The file stream is closed.</exception>
5362
public static FileSecurity GetAccessControl(this FileStream fileStream)
5463
{
64+
if (fileStream == null)
65+
{
66+
throw new ArgumentNullException(nameof(fileStream));
67+
}
68+
5569
SafeFileHandle handle = fileStream.SafeFileHandle;
5670
if (handle.IsClosed)
5771
{
5872
throw new ObjectDisposedException(null, SR.ObjectDisposed_FileClosed);
5973
}
74+
6075
return new FileSecurity(handle, AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group);
6176
}
6277

78+
/// <summary>
79+
/// This extension method for FileStream sets the security descriptors for the file using a FileSecurity instance.
80+
/// </summary>
81+
/// <param name="fileStream">An object that represents the file to apply security changes to.</param>
82+
/// <param name="fileSecurity">An object that determines the access control and audit security for the file.</param>
83+
/// <exception cref="ArgumentNullException"><paramref name="fileStream" /> or <paramref name="fileSecurity" /> is <see langword="null" />.</exception>
84+
/// <exception cref="ObjectDisposedException">The file stream is closed.</exception>
6385
public static void SetAccessControl(this FileStream fileStream, FileSecurity fileSecurity)
6486
{
65-
SafeFileHandle handle = fileStream.SafeFileHandle;
87+
if (fileStream == null)
88+
{
89+
throw new ArgumentNullException(nameof(fileStream));
90+
}
6691

6792
if (fileSecurity == null)
93+
{
6894
throw new ArgumentNullException(nameof(fileSecurity));
95+
}
6996

97+
SafeFileHandle handle = fileStream.SafeFileHandle;
7098
if (handle.IsClosed)
7199
{
72100
throw new ObjectDisposedException(null, SR.ObjectDisposed_FileClosed);
@@ -85,10 +113,14 @@ public static void SetAccessControl(this FileStream fileStream, FileSecurity fil
85113
public static void Create(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
86114
{
87115
if (directoryInfo == null)
116+
{
88117
throw new ArgumentNullException(nameof(directoryInfo));
118+
}
89119

90120
if (directorySecurity == null)
121+
{
91122
throw new ArgumentNullException(nameof(directorySecurity));
123+
}
92124

93125
FileSystem.CreateDirectory(directoryInfo.FullName, directorySecurity.GetSecurityDescriptorBinaryForm());
94126
}
@@ -173,10 +205,12 @@ private static FileAccess GetFileStreamFileAccess(FileSystemRights rights)
173205
{
174206
access = FileAccess.Read;
175207
}
208+
176209
if ((rights & FileSystemRights.WriteData) != 0 || ((int)rights & Interop.Kernel32.GenericOperations.GENERIC_WRITE) != 0)
177210
{
178211
access = access == FileAccess.Read ? FileAccess.ReadWrite : FileAccess.Write;
179212
}
213+
180214
return access;
181215
}
182216

src/libraries/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.net46.cs

+15
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,26 @@ public static void SetAccessControl(this FileInfo fileInfo, FileSecurity fileSec
6262

6363
public static FileSecurity GetAccessControl(this FileStream fileStream)
6464
{
65+
if (fileStream == null)
66+
{
67+
throw new ArgumentNullException(nameof(fileStream));
68+
}
69+
6570
return fileStream.GetAccessControl();
6671
}
6772

6873
public static void SetAccessControl(this FileStream fileStream, FileSecurity fileSecurity)
6974
{
75+
if (fileStream == null)
76+
{
77+
throw new ArgumentNullException(nameof(fileStream));
78+
}
79+
80+
if (fileSecurity == null)
81+
{
82+
throw new ArgumentNullException(nameof(fileSecurity));
83+
}
84+
7085
fileStream.SetAccessControl(fileSecurity);
7186
}
7287
}

src/libraries/System.IO.FileSystem.AccessControl/tests/FileSystemAclExtensionsTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public void GetAccessControl_FileInfo_AccessControlSections_ReturnsValidObject()
106106
[Fact]
107107
public void GetAccessControl_Filestream_InvalidArguments()
108108
{
109-
Assert.Throws<NullReferenceException>(() => FileSystemAclExtensions.GetAccessControl((FileStream)null));
109+
Assert.Throws<ArgumentNullException>("fileStream", () => FileSystemAclExtensions.GetAccessControl((FileStream)null));
110110
}
111111

112112
[Fact]
@@ -175,7 +175,7 @@ public void SetAccessControl_FileInfo_FileSecurity_Success()
175175
[Fact]
176176
public void SetAccessControl_FileStream_FileSecurity_InvalidArguments()
177177
{
178-
Assert.Throws<NullReferenceException>(() => FileSystemAclExtensions.SetAccessControl((FileStream)null, (FileSecurity)null));
178+
Assert.Throws<ArgumentNullException>("fileStream", () => FileSystemAclExtensions.SetAccessControl((FileStream)null, (FileSecurity)null));
179179
}
180180

181181
[Fact]

0 commit comments

Comments
 (0)