phobos icon indicating copy to clipboard operation
phobos copied to clipboard

"File does not exist" while the real error is "ENAMETOOLONG (File name too long)"

Open dlangBugzillaToGithub opened this issue 3 years ago • 1 comments

kdevel reported this on 2022-10-06T14:44:40Z

Transfered from https://issues.dlang.org/show_bug.cgi?id=23392

Description

```fdne-vs-fntl.d
module file_does_not_exist__vs__file_name_too_long;
import std.stdio;
import std.file;

version (Posix):

string make_long_filename ()
{
   immutable char [256] longname = 'X'; // assuming NAME_MAX is 255
   return (cast (string) longname).dup ();
}

void main ()
{
   auto fsoname = make_long_filename ();
   auto de = DirEntry (fsoname);
}
```

$ dmd -g fdne-vs-fntl.d
$ strace -festat,lstat ./fdne-vs-fntl 
lstat("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0x7fffffffd6d8) = -1 ENAMETOOLONG (File name too long)
std.file.FileException@std/file.d(3887): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: File does not exist
----------------
??:? ref @safe std.file.DirEntry std.file.DirEntry.__ctor(immutable(char)[]) [0x4b383d]
./fdne-vs-fntl.d:16 _Dmain [0x4b1130]

The lstat call is performed in existsImpl while DirEntry is constructed. Alas, errno is not checked.

dlangBugzillaToGithub avatar Oct 06 '22 14:10 dlangBugzillaToGithub