Path conversion bug with check_case:strict

Corinna Vinschen
Tue Sep 7 17:12:00 GMT 2004

On Sep  7 12:32, Igor Pechtchanski wrote:
> Hi,
> I've been tracking down some weird behavior on my machine.  Basically,
> when a windows program is invoked from a Cygwin one, the PATH got
> truncated at the first "/cygdrive/*" entry.  To reproduce, add
> "check_case:strict" to $CYGWIN, change one of the default Windows PATH
> entries to have incorrect case, run "cmd" from bash, and observe that
> "echo %PATH%" prints a truncated PATH.
> I finally managed to find the culprit: path_conv::check will break off
> converting the path if it contains a directory with the wrong case and
> check_case is set to strict.  The call sequence, AFAICS, is as follows:
> 	spawn_guts()
> 	  build_env()
> 	    getwinenv()
> 	      winenv::add_cache()
> 		cygwin_posix_to_win32_path_list()
> 		  conv_path_list()
> 		    cygwin_conv_to_win32_path()
> 		      path_conv::path_conv()
> 			path_conv::check()
> (I have a full gdb stack trace if needed).
> I'm not quite sure what the right fix for this would be, as
> path_conv::check is a pretty generic method called all over the place, and
> this particular call sequence has nothing special to identify it.  My
> guess at the fix would be to save the value of pcheck_case in build_env,
> set it to PCHECK_RELAXED, do the conversion, and then restore it.  What do
> people think?  If this is an acceptable solution, I'll start the process
> of sending in a patch.

What about adding a value to enum pathconv_arg, say PC_IGNORE_CASE or so,
which could be added to calls to path_conf?  Temporary changing the value
of pcheck_case doesn't sound exactly thread safe.

Sigh, check_case is just another invention I'd rather like to get rid of.
Like ntea or textmode...


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader
Red Hat, Inc.

More information about the Cygwin-developers mailing list