URLMON: Encode URL in file protocol
Jacek Caban
jack at itma.pwr.wroc.pl
Sun Sep 11 13:00:38 CDT 2005
Changelog:
Encode URL in file protocol
-------------- next part --------------
Index: dlls/urlmon/file.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/file.c,v
retrieving revision 1.1
diff -u -p -r1.1 file.c
--- dlls/urlmon/file.c 6 Sep 2005 09:27:04 -0000 1.1
+++ dlls/urlmon/file.c 11 Sep 2005 17:55:56 -0000
@@ -102,6 +102,9 @@ static HRESULT WINAPI FileProtocol_Start
BINDINFO bindinfo;
DWORD grfBINDF = 0;
LARGE_INTEGER size;
+ DWORD len;
+ LPWSTR url;
+ HRESULT hres;
static const WCHAR wszFile[] = {'f','i','l','e',':'};
@@ -116,24 +119,35 @@ static HRESULT WINAPI FileProtocol_Start
|| memcmp(szUrl, wszFile, sizeof(wszFile)))
return MK_E_SYNTAX;
+ len = lstrlenW(szUrl)+16;
+ url = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
+ hres = CoInternetParseUrl(szUrl, PARSE_ENCODE, 0, url, len, &len, 0);
+ if(FAILED(hres)) {
+ HeapFree(GetProcessHeap(), 0, url);
+ return hres;
+ }
+
/* FIXME:
* Implement MIME type checking
*/
if(!This->file) {
- This->file = CreateFileW(szUrl+sizeof(wszFile)/sizeof(WCHAR), GENERIC_READ, FILE_SHARE_READ,
+ This->file = CreateFileW(url+sizeof(wszFile)/sizeof(WCHAR), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(This->file == INVALID_HANDLE_VALUE) {
This->file = NULL;
IInternetProtocolSink_ReportResult(pOIProtSink, INET_E_RESOURCE_NOT_FOUND,
GetLastError(), NULL);
+ HeapFree(GetProcessHeap(), 0, url);
return INET_E_RESOURCE_NOT_FOUND;
}
IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_CACHEFILENAMEAVAILABLE,
- szUrl+sizeof(wszFile)/sizeof(WCHAR));
+ url+sizeof(wszFile)/sizeof(WCHAR));
IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL);
+
+ HeapFree(GetProcessHeap(), 0, url);
}
if(GetFileSizeEx(This->file, &size))
More information about the wine-patches
mailing list