WinE-Bug? InternetCrackUrl incorrectly sets dwUrlPathLength

Jan Sporbeck jan_lists at sporbeck-family.de
Wed Oct 29 04:59:27 CST 2003


Hi,

During some application testing, we discovered that WinE does not 
correctly mimic the WinINet function InternetCrackUrl. The real WinAPI 
sets the dwUrlPathLength member of the URL_COMPONENTS structure to 
additionally hold the extra info of the given URL if the extra info is 
not requested as a separate component. Although this behaviour is not 
well documented by the Win SDK, it is for instance implemented on WinXP, 
Win2000 and WinME and therefore might be considered to be intended by 
Microsoft.

The following lines of code demonstrate the problem:

    LPCTSTR lpszURL = _T("http://www.myserver.com/myscript.php?arg=1");
    URL_COMPONENTS url;

    // call 1: crack out url path and extra info
    ::ZeroMemory(&url, sizeof(url));
    url.dwStructSize = sizeof(url);
    url.dwHostNameLength = 1;
    url.dwUrlPathLength  = 1;
    url.dwExtraInfoLength = 1;
    ::InternetCrackUrl(lpszURL, 0, 0, &url);
    // dwUrlPathLength is 13, holding "/myscript.php"

    // call 2: only crack out url path
    ::ZeroMemory(&url, sizeof(url));
    url.dwStructSize = sizeof(url);
    url.dwHostNameLength = 1;
    url.dwUrlPathLength  = 1;
    ::InternetCrackUrl(lpszURL, 0, 0, &url);
    // now, dwUrlPathLength should be 19, holding "/myscript.php?arg=1",
    // while WinE still sets it to 13

OK, it is of course no great deal to write code that correctly runs on 
real Win systems and on WinE (2-3 lines did it). But programers who rely 
on this behaviour will for example wonder why their applications don't 
transmit any HTTP GET parameters when they call HttpOpenRequest with 
lpszObjectName set to the URL path component returned by InternetCrackUrl...


This applies to Wine 20031016, haven't  found any recent report on this 
though.

/jan.






More information about the wine-devel mailing list