From 9f6cf76b92e92e39c8dfa04fae4c1bb88bffdeb5 Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Thu, 4 May 2017 23:11:33 +0200 Subject: [PATCH] System.IO.Path.GetPathRoot string.Empty or whitespace character string should throw ArgumentException (dotnet/coreclr#11387) * GetPathRoot string.Empty and string whitespace throws ArgumentException * throw in next line * Refined method description * Unix impl adjusted * Indentation * pr feedback * Delete Path.Unix.cs * Adding param to ArgumentException Commit migrated from https://github.com/dotnet/coreclr/commit/8e99cd8031b2f568ea69116e7cf96d55e32cb7f5 --- src/coreclr/src/mscorlib/shared/System/IO/Path.Unix.cs | 9 +++++++-- src/coreclr/src/mscorlib/shared/System/IO/Path.Windows.cs | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/coreclr/src/mscorlib/shared/System/IO/Path.Unix.cs b/src/coreclr/src/mscorlib/shared/System/IO/Path.Unix.cs index 500c60a..68c5f70 100644 --- a/src/coreclr/src/mscorlib/shared/System/IO/Path.Unix.cs +++ b/src/coreclr/src/mscorlib/shared/System/IO/Path.Unix.cs @@ -23,7 +23,7 @@ namespace System.IO throw new ArgumentNullException(nameof(path)); if (path.Length == 0) - throw new ArgumentException(SR.Arg_PathIllegal); + throw new ArgumentException(SR.Arg_PathIllegal, nameof(path)); PathInternal.CheckInvalidPathChars(path); @@ -193,10 +193,15 @@ namespace System.IO return path.Length > 0 && path[0] == PathInternal.DirectorySeparatorChar; } + // The resulting string is null if path is null. If the path is empty or + // only contains whitespace characters an ArgumentException gets thrown. public static string GetPathRoot(string path) { if (path == null) return null; - return IsPathRooted(path) ? PathInternal.DirectorySeparatorCharAsString : String.Empty; + if (string.IsNullOrWhiteSpace(path)) + throw new ArgumentException(SR.Arg_PathIllegal, nameof(path)); + + return IsPathRooted(path) ? PathInternal.DirectorySeparatorCharAsString : String.Empty; } /// Gets whether the system is case-sensitive. diff --git a/src/coreclr/src/mscorlib/shared/System/IO/Path.Windows.cs b/src/coreclr/src/mscorlib/shared/System/IO/Path.Windows.cs index d6f0c62..1e573cd 100644 --- a/src/coreclr/src/mscorlib/shared/System/IO/Path.Windows.cs +++ b/src/coreclr/src/mscorlib/shared/System/IO/Path.Windows.cs @@ -136,10 +136,14 @@ namespace System.IO // path on the current drive), "X:" (a relative path on a given drive, // where X is the drive letter), "X:\" (an absolute path on a given drive), // and "\\server\share" (a UNC path for a given server and share name). - // The resulting string is null if path is null. + // The resulting string is null if path is null. If the path is empty or + // only contains whitespace characters an ArgumentException gets thrown. public static string GetPathRoot(string path) { if (path == null) return null; + if (string.IsNullOrWhiteSpace(path)) + throw new ArgumentException(SR.Arg_PathIllegal, nameof(path)); + PathInternal.CheckInvalidPathChars(path); // Need to return the normalized directory separator -- 2.7.4