On Dec 4 21:41, Ken Brown wrote: > On 12/4/2019 4:02 PM, Wilfed Olaf Sulla via cygwin wrote: > >> On 12/4/2019 2:26 PM, Wilfed Olaf Sulla via cygwin wrote: > >>> 692 83364 [main] ls 15015 normalize_posix_path: src Z:\ > >>> 35 83399 [main] ls 15015 normalize_win32_path: Z:\ = normalize_win32_path (Z:\) > >>> 24 83423 [main] ls 15015 mount_info::conv_to_win32_path: conv_to_win32_path (Z:) > >>> 24 83447 [main] ls 15015 mount_info::conv_to_win32_path: src_path Z:, dst Z:, flags 0x0, rc 0 > >>> 6738 90185 [main] ls 15015 symlink_info::check: 0xC0000034 = NtCreateFile (\??\Z:\) > >>> 214 90399 [main] ls 15015 __assert_func: assertion "p >= path" failed: > >> > >> I don't have time to check this carefully at the moment, but it looks like > >> what's happening is the following: > >> > >> path_conv::check is called on 'Z:\'. It strips the trailing backslash and calls > >> mount_info::conv_to_win32_path on 'Z:'. NtCreateFile fails with > >> STATUS_OBJECT_NAME_NOT_FOUND, which triggers the code containing the assertion. > >> The assertion fails because 'Z:' doesn't contain a backslash. > >> > >> I'll have time tomorrow to think about how to best fix this, if Corinna doesn't > >> get to it first. > > Yes I noticed that, but it also strips the trailing back-slash for all > > of the other virtual drives at the same stage in the checks on them as > > well. > > The difference is that NtCreateFile doesn't fail with > STATUS_OBJECT_NAME_NOT_FOUND in the other cases, so the code containing the > assertion doesn't get run. > > BTW, I just tried the following on my system: > > $ ls z:\\ > ls: cannot access 'z:\': No such file or directory > > strace shows that NtCreateFile fails with STATUS_OBJECT_PATH_NOT_FOUND in this > case, so again the code containing the assertion is not run. > > To be continued... So, maybe we could just check if ext_here - path > 2, i. e. if (status == STATUS_OBJECT_NAME_NOT_FOUND && ext_here - path > 2) That excludes "X:" paths from this special handling for DOS-only drives. Corinna -- Corinna Vinschen Cygwin Maintainer