Tcl Source Code

View Ticket
Login
Ticket UUID: 219258
Title: Glob doesn't deal properly with * and [
Type: Bug Version: obsolete: 8.4a1
Submitter: nobody Created on: 2000-10-26 05:04:16
Subsystem: 36. Pathname Management Assigned To: vincentdarley
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2001-10-29 22:03:07
Resolution: Fixed Closed By: vincentdarley
    Closed on: 2001-10-29 15:03:07
Description:
OriginalBugID: 6101 Bug
Version: 8.4a1
SubmitDate: '2000-08-09'
LastModified: '2000-09-05'
Severity: LOW
Status: Assigned
Submitter: techsupp
ChangedBy: hobbs
OS: Windows NT
FixedDate: '2000-10-25'
ClosedDate: '2000-10-25'


Name:
Michal Prussak

Comments:
Not really a big deal, but I thouht you should know.

ReproducibleScript:
Create files with names "*" and "[" (OK, * is perhaps bad, because NT applications can't access a file
with a * in the name anyway)

% glob {\*}
<gives listing of root directory>
% glob {\[}
no files matched glob pattern "\["

ObservedBehavior:
Files * and [ have not been matched

DesiredBehavior:
Files * and [ should have been matched, just like on Unix:

% glob {\[}
{[}
% glob {\*}
*



Verified this on 8.3.2 for Windows. 
-- 09/05/2000 hobbs
User Comments: vincentdarley added on 2001-09-20 21:15:59:

File Added - 11013: winStat.patch

Logged In: YES 
user_id=32170

I don't know how to create a file called '*' on Win2000 
(using Tcl or not) so I can't test the first part of the 
bug, but I can make '[' work with the patch attached.  This 
is basically the 'patch to speedup stat 100x' (although the 
speed up seems smaller).  It seems to pass all tests on 
Win2000, but should be tested on Win9x to make sure I've 
got the 'A' as well as 'W' APIs correct.

nobody added on 2001-09-18 21:25:34:
Logged In: NO 

Note: this is related to the 'speed up stat 100x on 
Windows' patch # 403001, in that if we apply a version of 
that patch, then we no longer need to eliminate file names 
contain wildcards, and this bug will go away.

vincentdarley added on 2001-08-24 22:16:52:
Logged In: YES 
user_id=32170

This is, I believe, nothing to do with 
TclpMatchFilesTypes.  Since we are matching a literal 
string here, 'glob' falls through to the end of TclDoGlob 
which simply checks for existence of the file, using 
Tcl_FSAccess (or since the patch was checked in yesterday) 
Tcl_FSLStat.  However, looking at the implementation of 
stat on WinTcl, I see this:

    /*
     * Eliminate file names containing wildcard characters, 
or subsequent 
     * call to FindFirstFile() will expand them, matching 
some other file.
     */

    transPtr = Tcl_FSGetTranslatedPath(NULL, pathPtr);
    if (transPtr == NULL || (strpbrk(Tcl_GetString
(transPtr), "?*") != NULL)) {
Tcl_SetErrno(ENOENT);
return -1;
    }

i.e. we purposefully disallow ourselves from statting any 
file with '*' or '?' in the name.  Since this bug is 
reported against older versions of Tcl, it seems as 
if 'access' has the same limitation (although it doesn't 
seem to be explicitly coded in Tcl's core).  I assume this 
is therefore a limitation of the Win32 api's we use, and 
therefore cannot be fixed (at least without changing those 
api's).

I'm therefore assigning this to Jeff, since he seems to 
know something about the 'real Win32' stuff (and I don't)

dkf added on 2000-11-24 21:26:33:
Probably a fault in the Windows implementation of TclpMatchFilesTypes()

Attachments: