Path conversion bug with check_case:strict

Igor Pechtchanski pechtcha@cs.nyu.edu
Tue Sep 7 16:32:00 GMT 2004


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.
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Happiness lies in being privileged to work hard for long hours in doing
whatever you think is worth doing."  -- Dr. Jubal Harshaw



More information about the Cygwin-developers mailing list