Bug 7223 – Access violation when using rmdirRecurse on folder without modify permissions

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
Other
OS
Windows
Creation time
2012-01-04T13:54:00Z
Last change time
2015-01-27T03:20:17Z
Assigned to
nobody
Creator
Jesse.K.Phillips+D

Comments

Comment #0 by Jesse.K.Phillips+D — 2012-01-04T13:54:27Z
On Windows if you do not have permissions to modify a folder (i.e. delete it) then the program will crash with an Access Violation instead of throwing a FileException. I tried adding writeln statements to try and narrow down the code and instead I end up with an infinite loop. Interesting bits below. === Bypassed === std.file.FileException@std\file.d(551): C:\New folder\New Text Document.txt: Acc ess is denied. ---------------- 436098 435F0F 403296 402125 402042 4027C8 40280C 402403 4BF2E5 ---------------- object.Error: Access Violation ---------------- 436098 435F0F 402042 4027C8 40280C 402403 4BF2E5 ---------------- Bypasses std.file.FileException@std\file.d(551) object.Error: Access Violation
Comment #1 by lovelydear — 2012-04-19T12:55:44Z
Code example ? Link to discussion ?
Comment #2 by Jesse.K.Phillips+D — 2012-04-20T08:23:35Z
(In reply to comment #1) > Code example ? Link to discussion ? A code example is tricky because the issue revolves around the environment and not the specific code. But here you go: import std.file; void main() { rmdirRecurse(r"C:\noper"); } Now create C:\noper as a different user from what you will be running it as, or find another way to remove your permissions. Probably throw in a file or two too.
Comment #3 by andy — 2015-01-27T03:20:17Z
I used this test code on windows x64 (and linux x64), using dmd 2.066.1: import std.file, std.stdio; void main() { try { rmdirRecurse("/tmp/foo"); } catch (Exception e) { writeln("Got the exception"); } } I "Got the exception" in both cases. Tough to say when this was fixed.