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]

[BUG ?] Failed to rebuild Cygwin


 Hello!

 I have occasionally found a little problem in path check code. Attempt to
reference thing like '/..' fails, however at least under Linux this resolves
to root, and you can actually attempt to go past-root as many times as you
want, e. g. '/../../../..'. The bug was occasionally revealed by 'make' test
suite.
 I wanted to fix it, but cannot rebuild Cygwin DLL. The build ends up in:
--- cut ---
x86_64-w64-mingw32-g++  -o strace.exe strace.o path.o -L/usr/lib/w32api
-static -lntdll
/usr/x86_64-w64-mingw32/sys-root/mingw/lib/../lib/crt2.o: In function
`__tmainCRTStartup':
/usr/src/debug/mingw64-x86_64-runtime-3.0b_svn5935-1/crt/crtexe.c:285:
undefined reference to `_set_invalid_parameter_handler'
/usr/x86_64-w64-mingw32/sys-root/mingw/lib/../lib/libmingwex.a(lib64_libming
wex_a-mingw_pformat.o): In function `__pformat_exponent_digits':
/usr/src/debug/mingw64-x86_64-runtime-3.0b_svn5935-1/stdio/mingw_pformat.c:1
76: undefined reference to `_get_output_format'
collect2: error: ld returned 1 exit status
Makefile:143: recipe for target `cygwin-console-helper.exe' failed
make[3]: *** [cygwin-console-helper.exe] Error 1
--- cut ---
 Likely some MinGW CRT bug ?

 P.S. I suggest that the way to fix the described path check bug is to undo
your small optimization and move back setting check_parent flag to:
--- cut ---
      /* Strip runs of /'s.  */
      if (!isslash (*src))
        {
	  *tail++ = *src++;
	  check_parent = true;
	}
--- cut ---
 The idea behind this is that the check will take place only if we have
actually got something to check (at least one non-slash character). In case
of '/..' the first 'isslash(*src)' returns TRUE, consequently the loop will
not run at all.
 An alternative is to add a check against 'dst' being empty around the
actual check:
--- cut ---
		      path_conv head (dst);
		      if (!head.isdir())
		        return ENOENT;
--- cut ---

 A test case for this problem is being able to execute 'ls /../../..' and
get listing of '/'.

Kind regards,
Pavel Fedin
Expert Engineer
Samsung Electronics Research center Russia




--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


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