#4204 [file normalize] can't handle all "path" intreps

obsolete: 8.6a4
closed-fixed
9
2008-12-04
2008-12-04
Don Porter
No

% file normalize dltest/..
/home/dgp/cvs/tcl/unix

% lindex [glob -types hidden dltest/..] 0
dltest/..
% file normalize [lindex [glob -types hidden dltest/..] 0]
/home/dgp/cvs/tcl/unix/dltest/..

The same string value gets treated
differently due to different intrep
history.

Fundamentally this is a flaw in
Tcl_FSGetNormalizedPath(), and is
the underlying cause of Bug 2378350
in the tclvfs project.

Discussion

  • Don Porter

    Don Porter - 2008-12-04

    This same bug is present in all
    active branches, 8.4, 8.5, 8.6,
    but is more serious in 8.5+
    because the troublesome intrep
    is more widely used.

     
  • Don Porter

    Don Porter - 2008-12-04

    Here's the corrected demo to show the
    flaw on 8.4.19+ as well:

    % file normalize dltest/..
    /home/dgp/cvs/tcl8.4/unix
    % lindex [glob -type hidden dltest/*] 1
    dltest/..
    % file normalize [lindex [glob -type hidden dltest/*] 1]
    /home/dgp/cvs/tcl8.4/unix/dltest/..
    % info patch
    8.4.19

     
  • Don Porter

    Don Porter - 2008-12-04

    Patch 682500 introduced this bug
    when it was committed for Tcl 8.4.2
    on 2003-02-10.

     
  • Don Porter

    Don Porter - 2008-12-04

    With the archeology aside, the fact
    of intrep-dependent behavior is
    unquestionably a bug, but doesn't
    answer which is correct.

    I'll proceed on the assumption that
    supressing the /../ is the aim, but
    that may well run against the expectations
    of yet something else. This whole
    section of code is an inconsistent mess.

     
  • Don Porter

    Don Porter - 2008-12-04

    Fixes committed for 8.4.20, 8.5.6, and 8.6b1

     
  • Don Porter

    Don Porter - 2008-12-04
    • status: open --> closed-fixed