#4799 File normalization corner case of ... broken with -DUNICODE

obsolete: 8.6b1.1
closed-fixed
5
2011-03-12
2011-02-18
No

Ran into the following corner case as a result of a typo - if a path component contains "..." or (more than two dots), the normalized string is corrupted.
(bug is WINDOWS specific)

tkcon session:

(tcl) 49 % pwd
C:/Documents and Settings/ashok/My Documents/src/twapi-exp/twapi/tcl
(tcl) 50 % file normalize [file join [pwd] ...]
C:/Documents and Settings/ashok/My Documents/src/twapi-exp/twapi/tcltcl (more non-printable chars here)

The problem was a broken calculation in TclpObjNormalizePath when UNICODE is defined. The patch to fix this is :

*** tclWinFile.c.orig 2011-02-18 09:19:45.750000000 +0530
--- tclWinFile.c 2011-02-18 13:45:03.750000000 +0530
*************** TclpObjNormalizePath(
*** 2778,2786 ****
* path segment and continue.
*/

! Tcl_DStringAppend(&dsNorm, (const char *)
! ((WCHAR *)(nativePath + Tcl_DStringLength(&ds))
! - dotLen), (int)(dotLen * sizeof(WCHAR)));
} else {
/*
* Normal path.
--- 2778,2788 ----
* path segment and continue.
*/

! Tcl_DStringAppend(&dsNorm,
! ((const char *) nativePath) +
! Tcl_DStringLength(&ds) /* # bytes, not TCHARS */
! - (dotLen * sizeof(TCHAR)),
! (int)(dotLen * sizeof(WCHAR)));
} else {
/*
* Normal path.

After patching, output is as follows :

% file normalize [file join [pwd] ...]
C:/Documents and Settings/ashok/My Documents/src/twapi-exp/twapi/tcl/...

which matches Tcl 8.5 behavour.

Note this behaviour has a separate issue - treatment of ... is different from Windows semantics. That is logged as a separate bug.

Discussion

  • Jan Nijtmans

    Jan Nijtmans - 2011-02-18

    Thank you! I'll take it up, as soon as the Tcl repository is committable again.

     
  • Jan Nijtmans

    Jan Nijtmans - 2011-02-18
    • assigned_to: vincentdarley --> nijtmans
     
  • Jan Nijtmans

    Jan Nijtmans - 2011-03-12

    Fixed in trunk. Thanks!

     
  • Jan Nijtmans

    Jan Nijtmans - 2011-03-12
    • status: open --> closed-fixed
     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.





No, thanks