http://bugs.winehq.org/show_bug.cgi?id=25186
Summary: Tom Clancy's Splinter Cell installer locks up Product: Wine Version: 1.3.7 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: shell32 AssignedTo: wine-bugs@winehq.org ReportedBy: pp@siedziba.pl
Splinter Cell installer enters infinite loop before it installs any files. Regression test finds this commit as the culprit:
f324f3c31ef4b0a6b5273aca534c173d68932462 is the first bad commit commit f324f3c31ef4b0a6b5273aca534c173d68932462 Author: Andrew Eikum aeikum@codeweavers.com Date: Thu Nov 11 15:58:12 2010 -0600
shell32: Don't fail if the path doesn't exist in Unix in IShellFolder::ParseDisplayName.
:040000 040000 319f1430fd21651467b6d173c38aa9b2ae2f25ca 97d7adfd2c2ad0c7b00aefed240ddf18a9899875 M dlls
Debugging the issue further, the patch introduces this loop:
1. while(!(pszUnixPath = wine_get_unix_file_name(dospath))){ 2. if(has_failed) 3. *dospath_end = '/'; 4. else 5. has_failed = 1; 6. while(*dospath_end != '\' && *dospath_end != '/') 7. --dospath_end; 8. *dospath_end = '\0'; 9. }
When I print the dospath variable between lines 1 and 2, the output is:
C:\Program Files\Ubi Soft Entertainment\Tom Clancy's Splinter Cell Demo\Support\Readme.txt C:\Program Files\Ubi Soft Entertainment\Tom Clancy's Splinter Cell Demo\Support C:\Program Files\Ubi Soft Entertainment\Tom Clancy's Splinter Cell Demo\Support C:\Program Files\Ubi Soft Entertainment\Tom Clancy's Splinter Cell Demo\Support [...]
... and it repeats ad infinitum.
The problem is, the inner while loop at line 6 immediately finds the '/' char written earlier at line 3, so dospath_end variable isn't decremented, and it loops forever.
I don't know what this piece of code is supposed to do, so I have no idea what is the correct way to fix it.