Feature #3399

UNC path is not handled properly

Added by jojelino _ almost 5 years ago. Updated about 3 years ago.

[ruby-core:30623]
Status:Closed
Priority:Low
Assignee:Nobuyoshi Nakada

Description

=begin
(gdb)
0x62d4a4f1 2835 BUFINIT();
(gdb) print s
$5 = 0xc7dfa0 "//?/D:/ruby2/lib/ruby/site_ruby/1.9.1"
this is from rbconfig.rb
CONFIG = {}
CONFIG["DESTDIR"] = DESTDIR
CONFIG["MAJOR"] = "1"
CONFIG["MINOR"] = "9"
CONFIG["TEENY"] = "1"
CONFIG["PATCHLEVEL"] = "-1"
CONFIG["INSTALL"] = '/usr/bin/ginstall -c'
CONFIG["EXEEXT"] = ".exe"
CONFIG["prefix"] = (TOPDIR || DESTDIR + "d:/ruby2")
CONFIG["ruby_install_name"] = "ruby"
CONFIG["RUBY_INSTALL_NAME"] = "ruby"
CONFIG["RUBY_SO_NAME"] = "msvcrt-ruby191"
CONFIG["PACKAGE"] = "ruby"
CONFIG["BUILTIN_TRANSSRCS"] = " newline.c"
CONFIG["MANTYPE"] = "doc"
CONFIG["NROFF"] = "/usr/bin/nroff"
CONFIG["vendorhdrdir"] = "$(rubyhdrdir)/vendor_ruby"
CONFIG["sitehdrdir"] = "$(rubyhdrdir)/site_ruby"
CONFIG["rubyhdrdir"] = "$(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)"
CONFIG["UNIVERSAL_INTS"] = ""
CONFIG["UNIVERSAL_ARCHNAMES"] = ""
CONFIG["configure_args"] = " 'optflags=-mno-cygwin -O4' '--enable-load-relative' '--target=i686-pc-mingw32' '--prefix=/usr/mingw' '--disable-install-doc' 'target_alias=i686-pc-mingw32'"
CONFIG["vendordir"] = "$(rubylibprefix)/vendor_ruby"
CONFIG["sitedir"] = "$(rubylibprefix)/site_ruby"
CONFIG["ruby_version"] = "1.9.1"
CONFIG["sitearch"] = "i386-msvcrt"
CONFIG["arch"] = "i386-mingw32"
CONFIG["RI_BASE_NAME"] = "ri"
CONFIG["ridir"] = "$(datarootdir)/$(RI_BASE_NAME)"
CONFIG["rubylibprefix"] = "$(libdir)/$(RUBY_BASE_NAME)"
CONFIG["MAKEFILES"] = "Makefile GNUmakefile"
CONFIG["THREAD_MODEL"] = "win32"
CONFIG["EXPORT_PREFIX"] = " "
CONFIG["COMMON_HEADERS"] = "winsock2.h windows.h"
CONFIG["COMMON_MACROS"] = ""
CONFIG["COMMON_LIBS"] = "m"
CONFIG["MAINLIBS"] = ""
CONFIG["ENABLE_SHARED"] = "yes"
CONFIG["DLDLIBS"] = ""
CONFIG["SOLIBS"] = "$(LIBS)"
CONFIG["LIBRUBYARG_SHARED"] = "-l$(RUBY_SO_NAME)"
CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static"
CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_SHARED)"
CONFIG["LIBRUBY"] = "lib$(RUBY_SO_NAME).dll.a"
CONFIG["LIBRUBY_ALIASES"] = ""
CONFIG["LIBRUBY_SO"] = "$(RUBY_SO_NAME).dll"
CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
CONFIG["RUBYW_INSTALL_NAME"] = "$(RUBYW_BASE_NAME)"
CONFIG["rubyw_install_name"] = "$(RUBYW_INSTALL_NAME)"
CONFIG["LIBRUBY_DLDFLAGS"] = " -mno-cygwin -Wl,--enable-auto-image-base,--enable-auto-import -Wl,--out-implib=$(LIBRUBY) $(RUBYDEF)"
CONFIG["LIBRUBY_LDSHARED"] = "$(CC) -mno-cygwin -shared $(if $(filter-out -g -g0,$(debugflags)),,-g3)"
CONFIG["warnflags"] = "-Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long"
CONFIG["debugflags"] = "-g"
CONFIG["optflags"] = "-mno-cygwin -O4"
CONFIG["cxxflags"] = " $(optflags) $(debugflags) $(warnflags)"
CONFIG["cflags"] = " $(optflags) $(debugflags) $(warnflags)"
CONFIG["cppflags"] = ""
CONFIG["INSTALLDOC"] = "nodoc"
CONFIG["RDOCTARGET"] = "nodoc"
CONFIG["EXECUTABLE_EXTS"] = ".exe .com .cmd .bat"
CONFIG["ARCHFILE"] = ""
CONFIG["EXTOUT"] = ".ext"
CONFIG["PREP"] = "miniruby$(EXEEXT)"
CONFIG["TEST_RUNNABLE"] = "yes"
CONFIG["setup"] = "Setup"
CONFIG["EXTSTATIC"] = ""
CONFIG["STRIP"] = "strip"
CONFIG["TRY_LINK"] = ""
CONFIG["LIBPATHENV"] = ""
CONFIG["RPATHFLAG"] = ""
CONFIG["LIBPATHFLAG"] = " -L%s"
CONFIG["LINK_SO"] = ""
CONFIG["LIBEXT"] = "a"
CONFIG["DLEXT2"] = ""
CONFIG["DLEXT"] = "so"
CONFIG["LDSHAREDXX"] = "$(CXX) -mno-cygwin -shared $(if $(filter-out -g -g0,$(debugflags)),,-g3)"
CONFIG["LDSHARED"] = "$(CC) -mno-cygwin -shared $(if $(filter-out -g -g0,$(debugflags)),,-g3)"
CONFIG["CCDLFLAGS"] = " -mno-cygwin "
CONFIG["STATIC"] = ""
CONFIG["ARCH_FLAG"] = ""
CONFIG["DLDFLAGS"] = " -mno-cygwin -Wl,--enable-auto-image-base,--enable-auto-import $(DEFFILE)"
CONFIG["ALLOCA"] = ""
CONFIG["CHDIR"] = "cd -P"
CONFIG["RMALL"] = "rm -fr"
CONFIG["RMDIRS"] = "rmdir -p"
CONFIG["CP"] = "cp"
CONFIG["RM"] = "rm -f"
CONFIG["CAPITARGET"] = "nodoc"
CONFIG["DOXYGEN"] = "doxygen"
CONFIG["DOT"] = ""
CONFIG["MAKEDIRS"] = "/usr/bin/mkdir -p"
CONFIG["MKDIR_P"] = "/usr/bin/mkdir -p"
CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
CONFIG["SET_MAKE"] = ""
CONFIG["LN_S"] = "ln -s"
CONFIG["DLLWRAP"] = "dllwrap"
CONFIG["WINDRES"] = "windres"
CONFIG["NM"] = "nm"
CONFIG["OBJCOPY"] = ":"
CONFIG["OBJDUMP"] = "objdump"
CONFIG["ASFLAGS"] = ""
CONFIG["AS"] = "as"
CONFIG["AR"] = "ar"
CONFIG["RANLIB"] = "ranlib"
CONFIG["try_header"] = ""
CONFIG["COUTFLAG"] = "-o "
CONFIG["OUTFLAG"] = "-o "
CONFIG["CPPOUTFILE"] = "-o conftest.i"
CONFIG["GNU_LD"] = "yes"
CONFIG["GCC"] = "yes"
CONFIG["EGREP"] = "/usr/bin/grep -E"
CONFIG["GREP"] = "/usr/bin/grep"
CONFIG["CPP"] = "$(CC) -E"
CONFIG["CXXFLAGS"] = "$(cxxflags)"
CONFIG["CXX"] = "g++"
CONFIG["OBJEXT"] = "o"
CONFIG["CPPFLAGS"] = " $(DEFS) $(cppflags)"
CONFIG["LDFLAGS"] = "-L. -mno-cygwin "
CONFIG["CFLAGS"] = "$(cflags)"
CONFIG["CC"] = "gcc"
CONFIG["target_os"] = "mingw32"
CONFIG["target_vendor"] = "pc"
CONFIG["target_cpu"] = "i386"
CONFIG["target"] = "i386-pc-mingw32"
CONFIG["host_os"] = "cygwin"
CONFIG["host_vendor"] = "pc"
CONFIG["host_cpu"] = "i686"
CONFIG["host"] = "i686-pc-cygwin"
CONFIG["build_os"] = "cygwin"
CONFIG["build_vendor"] = "pc"
CONFIG["build_cpu"] = "i686"
CONFIG["build"] = "i686-pc-cygwin"
CONFIG["RUBYW_BASE_NAME"] = "rubyw"
CONFIG["RUBY_BASE_NAME"] = "ruby"
CONFIG["RUBY_RELEASE_DATE"] = "2010-06-05"
CONFIG["RUBY_PROGRAM_VERSION"] = "1.9.3"
CONFIG["BASERUBY"] = "ruby"
CONFIG["target_alias"] = "i386-pc-mingw32"
CONFIG["host_alias"] = ""
CONFIG["build_alias"] = ""
CONFIG["LIBS"] = " -mno-cygwin -lshell32 -lws2_32 -limagehlp "
CONFIG["ECHO_T"] = ""
CONFIG["ECHO_N"] = "-n"
CONFIG["ECHO_C"] = ""
CONFIG["DEFS"] = ""
CONFIG["mandir"] = "$(datarootdir)/man"
CONFIG["localedir"] = "$(datarootdir)/locale"
CONFIG["libdir"] = "$(exec_prefix)/lib"
CONFIG["psdir"] = "$(docdir)"
CONFIG["pdfdir"] = "$(docdir)"
CONFIG["dvidir"] = "$(docdir)"
CONFIG["htmldir"] = "$(docdir)"
CONFIG["infodir"] = "$(datarootdir)/info"
CONFIG["docdir"] = "$(datarootdir)/doc/$(PACKAGE)"
CONFIG["oldincludedir"] = "/usr/include"
CONFIG["includedir"] = "$(prefix)/include"
CONFIG["localstatedir"] = "$(prefix)/var"
CONFIG["sharedstatedir"] = "$(prefix)/com"
CONFIG["sysconfdir"] = "$(prefix)/etc"
CONFIG["datadir"] = "$(datarootdir)"
CONFIG["datarootdir"] = "$(prefix)/share"
CONFIG["libexecdir"] = "$(exec_prefix)/libexec"
CONFIG["sbindir"] = "$(exec_prefix)/sbin"
CONFIG["bindir"] = "$(exec_prefix)/bin"
CONFIG["exec_prefix"] = "$(prefix)"
CONFIG["PACKAGE_URL"] = ""
CONFIG["PACKAGE_BUGREPORT"] = ""
CONFIG["PACKAGE_STRING"] = ""
CONFIG["PACKAGE_VERSION"] = ""
CONFIG["PACKAGE_TARNAME"] = ""
CONFIG["PACKAGE_NAME"] = ""
CONFIG["PATH_SEPARATOR"] = ":"
CONFIG["SHELL"] = "/bin/sh"
CONFIG["rubylibdir"] = "$(rubylibprefix)/$(ruby_version)"
CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"
CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
CONFIG["topdir"] = File.dirname(FILE)

i use gdb(cygwin) to debug ruby, cygwin thinks unc path \?\ is appended to debugee path. but this could have been eliminated or leaved as it is. i suspeced that ruby thinks it as regular path and substitutes \ to /. the result is total disaster. it is clear that every corresponding native win32 api fails because there is no //?/ unc path.
(gdb)
0x62d4a4f1 2835 BUFINIT();
(gdb) print s
$5 = 0xc7dfa0 "//?/D:/ruby2/lib/ruby/site_ruby/1.9.1"
3072 HANDLE h = FindFirstFile(skipprefix(b), &wfd);
1: $eax = 0x0
(gdb) print b
$5 = 0xc7ec78 "//?/D:/ruby2/lib/ruby/site_ruby/1.9.1"
=end

rbconfig.rb Magnifier (8.39 KB) jojelino _, 06/07/2010 02:18 AM

Associated revisions

Revision 35271
Added by Nobuyoshi Nakada about 3 years ago

  • win32/win32.c (isUNCRoot, winnt_stat): support long UNC. [Feature #3399]

Revision 35271
Added by Nobuyoshi Nakada about 3 years ago

  • win32/win32.c (isUNCRoot, winnt_stat): support long UNC. [Feature #3399]

History

#1 Updated by Luis Lavena almost 5 years ago

=begin
You're trying to use cygwin GDB with a mingw-target Ruby, are you sure that works?

I've used mingw-based GDB in the past with, of course, mingw-based Ruby and had no problems.

=end

#2 Updated by jojelino _ almost 5 years ago

=begin
1> at least i can assert that the stuff '\?\' is windows-specific stuff that we don't like to be encountered. and i could see that cygwin do workaround by checking whether '\?\ is present and ignore it.
i'm happy to being said that the same workaround can be applied to ruby.
=end

#3 Updated by Nobuyoshi Nakada almost 5 years ago

  • Target version set to 1.9.2

=begin

=end

#4 Updated by Yui NARUSE almost 4 years ago

  • Target version changed from 1.9.2 to 2.0.0

#5 Updated by Hiroshi Nakamura about 3 years ago

  • Assignee set to Nobuyoshi Nakada
  • Description updated (diff)

#6 Updated by Shyouhei Urabe about 3 years ago

  • Status changed from Open to Assigned

#7 Updated by Nobuyoshi Nakada about 3 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r35271.
jojelino, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • win32/win32.c (isUNCRoot, winnt_stat): support long UNC. [Feature #3399]

Also available in: Atom PDF