Reject wildcards in directory names

Shachar Shemesh wine-devel at shemesh.biz
Tue Nov 25 07:36:37 CST 2003


Alexandre Julliard wrote:

>"Rolf Kalbermatter" <rolf.kalbermatter at citeng.com> writes:
>
>  
>
>>My tests show that RemoveDirectory just as CreateDirectory rejects all
>>paths which contain one of the wildcards ": * ? \" < > |" with error 123
>>completely independent where that character occurs (not just in the path
>>element which is created).
>>And as far as I can say DeleteFile just as much behaves also this way.
>>So should we attempt to be smarter than Windows in this case?
>>    
>>
>
>Yes, because under Unix you can actually create files that contain
>wildcards, so it should be possible to access them. We just need to
>prevent the Windows app itself from creating them.
>  
>
How on earth can a discussion about wildcards be related to unicows???

It appears that applications using unicows will not work in NT mode on 
wine unless the attached patch is applied. Unicows' init calls 
"GetFileAttributesW" with "???.???". It expects, if it fails, to get 
error code 123 (ERROR_INVALID_NAME), otherwise it simply doesn't work. 
Wine returns 2 (ERROR_FILE_NOT_FOUND). For that horrible sin, the entire 
application misbehaves. It also misbehaves, in the same way, if 
GetFileAttributes succeeds for this file. I can't escape the feeling 
this was meant specifically as a trap for Wine. I am yet to find any 
other use for this test. Any other explanation will be greatly appretiated.

One possible workaround that may satisfy both Alexandre and unicows may 
be to put the wildcards checking code into the error part of the 
function. In other words, if we have not found such a file, return 
ERROR_INVALID_NAME if the name contains wildcards, and 
ERROR_FILE_NOT_FOUND if not. This way, if the file IS found, it will be 
handled correctly.

Personally, I don't like this workaround. It means that a perfectly 
legal file name is reported as illegal. I am, however, open to suggestions.

             Shachar

-- 
Shachar Shemesh
Open Source integration & consulting
Home page & resume - http://www.shemesh.biz/

-------------- next part --------------
Index: files/dos_fs.c
===================================================================
RCS file: /home/sun/sources/cvs/wine/files/dos_fs.c,v
retrieving revision 1.142
diff -u -r1.142 dos_fs.c
--- files/dos_fs.c	15 Nov 2003 00:13:21 -0000	1.142
+++ files/dos_fs.c	25 Nov 2003 13:22:23 -0000
@@ -1047,6 +1047,12 @@
         return FALSE;
     }
 
+    if (strchrW(name, '?') || strchrW(name, '*'))
+    {
+        SetLastError(ERROR_INVALID_NAME);
+        return FALSE;
+    }
+
     if ((full->drive = DOSFS_GetPathDrive( &name )) == -1) return FALSE;
     flags = DRIVE_GetFlags( full->drive );
 


More information about the wine-devel mailing list