-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Open
Labels
area-System.IOhelp wanted[up-for-grabs] Good issue for external contributors[up-for-grabs] Good issue for external contributorsin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged
Milestone
Description
Description
Directory.Delete(string, bool) throws a StackOverflowException if the nesting depth of subdirectories is huge (in my case 14000).
Reproduction Steps
- Create nested subdirectories like below:
DirectoryInfo topMost = new DirectoryInfo("C:\\temp");
int depth = 14000;
DirectoryInfo subDir = topMost;
for (int i = 0; i < depth; i++)
{
subDir = subDir.CreateSubdirectory("a");
}- Then try to delete the top most directory
Directory.Delete(topMost.FullName, true);Expected behavior
Topmost directory and its all subdirectories are deleted successfully.
Actual behavior
A StackOverflowException is thrown with the following stacktrace:
Stack overflow.
at System.String.Concat(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>)
at System.IO.Path.JoinInternal(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>)
at System.IO.Path.CombineInternal(System.String, System.String)
at System.IO.Path.Combine(System.String, System.String)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
at System.IO.FileSystem.RemoveDirectoryRecursive(System.String, WIN32_FIND_DATA ByRef, Boolean)
....
....Regression?
No response
Known Workarounds
No response
Configuration
dotnet version: 6.0.301
operating system: Windows 10 version 21H2
Other information
No response
Metadata
Metadata
Assignees
Labels
area-System.IOhelp wanted[up-for-grabs] Good issue for external contributors[up-for-grabs] Good issue for external contributorsin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged