This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 3.0.7(0.338/5/3): Possible reference to Developer's instances of dev files in deployed build


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

Attachment: signature.asc
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]