From: SourceForge.net <no...@so...> - 2009-03-26 21:20:40
|
Bugs item #2710920, was opened at 2009-03-24 23:05 Message generated for change (Comment added) made by dgp You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2710920&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 37. File System Group: current: 8.5.6 Status: Open Resolution: None Priority: 9 Private: No Submitted By: Jeff Epler (jepler) Assigned to: Don Porter (dgp) Summary: [file tail] gives wrong result Initial Comment: This problem occurs on a freshly built 8.5.6 (unmodified) on Ubuntu Hardy and is also seen on 8.5.3-2 on ubuntu jaunty alpha (ubuntu modified). The bug is not seen in 8.4.16-4ubuntu1 (ubuntu modified) on ubuntu hardy. In a specific scenario involving [glob] with a trailing slash, the resulting files are treated improperly by [file tail]. An attached script, which can be run by $ make shell SCRIPT=filetailbug.tcl demonstrates the problem on my system. Expected output: /bin bin Actual output: /bin {} ---------------------------------------------------------------------- >Comment By: Don Porter (dgp) Date: 2009-03-26 17:20 Message: Appears that the fix of 1972879 did not create this bug, but just exposed it, by permitting some otherwise untested codepaths to execute. Problem is that [file tail] on the PATHFLAGS !=0 intrep for path values is just broken when paths have trailing separators. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2009-03-26 16:12 Message: The fix for Bug 1972879 is to blame. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2009-03-26 15:18 Message: Bug introduced between 8.5.2 and 8.5.3. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2009-03-26 14:19 Message: Sorry, I was misled by --enable-shared builds. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2009-03-26 13:58 Message: Further testing indicates that Tcl 8.5.0 works, while 8.5.1 has the bug. ---------------------------------------------------------------------- Comment By: Jeff Epler (jepler) Date: 2009-03-26 13:53 Message: I'm glad you found how to reproduce it! I can confirm what dgp says: whether the script is given as an absolute path or not affects the output. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2009-03-26 13:47 Message: I can now reproduce the problem with Tcl 8.5.6: $ make shell SCRIPT=fff.tcl ... LD_LIBRARY_PATH="`pwd`:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; \ TCL_LIBRARY="/home/dgp/cvs/tcl8.5.6/library"; export TCL_LIBRARY; \ ./tclsh fff.tcl /opt/ {} Note that a very similar attempt yields different results: $ make shell SCRIPT=~/fff.tcl ... LD_LIBRARY_PATH="`pwd`:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; \ TCL_LIBRARY="/home/dgp/cvs/tcl8.5.6/library"; export TCL_LIBRARY; \ ./tclsh ~/fff.tcl /opt/ opt Same script in a different place and accessed via an absolute path. So inspired by that difference, try: $ make shell SCRIPT=`pwd`/fff.tcl ... LD_LIBRARY_PATH="`pwd`:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; \ TCL_LIBRARY="/home/dgp/cvs/tcl8.5.6/library"; export TCL_LIBRARY; \ ./tclsh /home/dgp/cvs/tcl8.5.6/unix/fff.tcl /opt/ opt ---------------------------------------------------------------------- Comment By: Jeff Epler (jepler) Date: 2009-03-25 20:08 Message: I failed to correctly minimize the test case in my original submission. Please see the attached 'fff.tcl' instead of the original attachment. $ cat fff.tcl proc f {} { set d [glob -nocomplain /*/] set d [lindex $d 0] #set d [format %s $d] # uncommenting this line makes both 8.4 and 8.5 work puts stderr [list $d [file tail $d]] } f $ make shell SCRIPT=fff.tcl LD_LIBRARY_PATH="`pwd`:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; \ TCL_LIBRARY="/tmp/tcl8.5.6/library"; export TCL_LIBRARY; \ ./tclsh fff.tcl /mnt/ {} $ ---------------------------------------------------------------------- Comment By: Jeff Epler (jepler) Date: 2009-03-24 23:07 Message: I am not familiar with the tcl path object, but I attempted to generate some useful debugging information. I found that the 'normPathPtr' is an empty string, and that TclPathpart returns normPathPtr, leading to the result I am seeing. Perhaps the problem is occurring earlier at the point where this path object is constructed? Breakpoint 3, TclPathPart (interp=0x606400, pathPtr=0x62aa00, portion=TCL_PATH_TAIL) at /tmp/tcl8.5.6/unix/../generic/tclPathObj.c:596 596 const char *rest = TclGetString(fsPathPtr->normPathPtr); (gdb) print fsPathPtr->translatedPathPtr->bytes $32 = 0x636be0 "/bin" (gdb) print fsPathPtr->normPathPtr->bytes $33 = 0x7f2ed6902b48 "" (gdb) next 598 if (strchr(rest, '/') != NULL) { (gdb) 601 if (tclPlatform == TCL_PLATFORM_WINDOWS (gdb) 605 Tcl_IncrRefCount(fsPathPtr->normPathPtr); (gdb) 606 return fsPathPtr->normPathPtr; (gdb) 747 } (gdb) ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2710920&group_id=10894 |