From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/urlmon/mimefilter.c | 27 +++++++++++++++++++++++---- dlls/urlmon/tests/misc.c | 5 +++++ 2 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/dlls/urlmon/mimefilter.c b/dlls/urlmon/mimefilter.c index 793de18a853..40ca611ddb4 100644 --- a/dlls/urlmon/mimefilter.c +++ b/dlls/urlmon/mimefilter.c @@ -544,12 +544,21 @@ static HRESULT find_mime_from_buffer(const BYTE *buf, DWORD size, const WCHAR *p if(!proposed_mime) return E_FAIL;
- len = lstrlenW(proposed_mime)+1; - *ret_mime = CoTaskMemAlloc(len*sizeof(WCHAR)); + len = lstrlenW(proposed_mime); + for(i = 0; i < len; i++) + { + if (proposed_mime[i] == ';') + { + len = i; + break; + } + } + *ret_mime = CoTaskMemAlloc((len+1)*sizeof(WCHAR)); if(!*ret_mime) return E_OUTOFMEMORY;
memcpy(*ret_mime, proposed_mime, len*sizeof(WCHAR)); + ((WCHAR*)(*ret_mime))[len] = 0; return S_OK; }
@@ -638,12 +647,22 @@ static HRESULT find_mime_from_buffer(const BYTE *buf, DWORD size, const WCHAR *p
TRACE("found %s for %s\n", debugstr_w(ret), debugstr_an((const char*)buf, min(32, size)));
- len = lstrlenW(ret)+1; - *ret_mime = CoTaskMemAlloc(len*sizeof(WCHAR)); + len = lstrlenW(ret); + for(i = 0; i < len; i++) + { + if (ret[i] == ';') + { + len = i; + break; + } + } + + *ret_mime = CoTaskMemAlloc((len+1)*sizeof(WCHAR)); if(!*ret_mime) return E_OUTOFMEMORY;
memcpy(*ret_mime, ret, len*sizeof(WCHAR)); + ((WCHAR*)(*ret_mime))[len] = 0; return S_OK; }
diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c index 0926eb75224..2a61b892930 100644 --- a/dlls/urlmon/tests/misc.c +++ b/dlls/urlmon/tests/misc.c @@ -794,6 +794,11 @@ static void test_FindMimeFromData(void) ok(!lstrcmpW(mime, L"text/plain"), "wrong mime: %s\n", wine_dbgstr_w(mime)); CoTaskMemFree(mime);
+ hres = pFindMimeFromData(NULL, L"winexml://content/brew=1", data1, 0, L"text/html; charset=unicode", 0, &mime, 0); + ok(hres == S_OK, "FindMimeFromData failed: %08lx\n", hres); + ok(!lstrcmpW(mime, L"text/html"), "wrong mime: %s\n", wine_dbgstr_w(mime)); + CoTaskMemFree(mime); + hres = pFindMimeFromData(NULL, NULL, data1, 0, L"text/plain", 0, NULL, 0); ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, expected E_INVALIDARG\n", hres); }