dotnet/runtime
Vedi su GitHubDirectory.Delete(string, bool) throws StackOverflowException
Open
#84.344 aperta il 5 apr 2023
area-System.IOhelp wantedin-pr
Metriche repository
- Star
- (17.886 star)
- Metriche merge PR
- (Merge medio 12g 11h) (661 PR mergiate in 30 g)
Descrizione
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