From 58efbe97ec7a22c61e65757b8cbb3e9bd4ac75a7 Mon Sep 17 00:00:00 2001 From: Louis Lenders Date: Wed, 27 Aug 2008 09:27:34 -0700 Subject: [PATCH] shlwapi: Fix UrlUnEscape to expand URLs in-place even if the output buffer is NULL. --- dlls/shlwapi/tests/url.c | 4 ---- dlls/shlwapi/url.c | 12 ++++++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c index 0bff99d41b4..c7c6f8f74a3 100644 --- a/dlls/shlwapi/tests/url.c +++ b/dlls/shlwapi/tests/url.c @@ -937,21 +937,17 @@ static void test_UrlUnescape(void) ok(!strcmp(inplace, expected), "got %s expected %s\n", inplace, expected); ok(dwEscaped == 27, "got %d expected 27\n", dwEscaped); - todo_wine { /* if we set the bufferpointer to NULL, the string apparently still gets converted (Google Lively does this)) */ ok(UrlUnescapeA(another_inplace, NULL, NULL, URL_UNESCAPE_INPLACE) == S_OK, "UrlUnescapeA failed unexpectedly\n"); ok(!strcmp(another_inplace, expected), "got %s expected %s\n", another_inplace, expected); - } dwEscaped = sizeof(inplaceW); ok(UrlUnescapeW(inplaceW, NULL, &dwEscaped, URL_UNESCAPE_INPLACE) == S_OK, "UrlUnescapeW failed unexpectedly\n"); ok(dwEscaped == 50, "got %d expected 50\n", dwEscaped); - todo_wine { /* if we set the bufferpointer to NULL, the string apparently still gets converted (Google Lively does this)) */ ok(UrlUnescapeW(another_inplaceW, NULL, NULL, URL_UNESCAPE_INPLACE) == S_OK, "UrlUnescapeW failed unexpectedly\n"); ok(lstrlenW(another_inplaceW) == 24, "got %d expected 24\n", lstrlenW(another_inplaceW)); - } } diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c index c286fc60c3f..febf6a790f1 100644 --- a/dlls/shlwapi/url.c +++ b/dlls/shlwapi/url.c @@ -1155,13 +1155,15 @@ HRESULT WINAPI UrlUnescapeA( TRACE("(%s, %p, %p, 0x%08x)\n", debugstr_a(pszUrl), pszUnescaped, pcchUnescaped, dwFlags); - if(!pszUrl || (!pszUnescaped && !(dwFlags & URL_UNESCAPE_INPLACE)) || !pcchUnescaped) - return E_INVALIDARG; + if (!pszUrl) return E_INVALIDARG; if(dwFlags & URL_UNESCAPE_INPLACE) dst = pszUrl; else + { + if (!pszUnescaped || !pcchUnescaped) return E_INVALIDARG; dst = pszUnescaped; + } for(src = pszUrl, needed = 0; *src; src++, needed++) { if(dwFlags & URL_DONT_UNESCAPE_EXTRA_INFO && @@ -1222,13 +1224,15 @@ HRESULT WINAPI UrlUnescapeW( TRACE("(%s, %p, %p, 0x%08x)\n", debugstr_w(pszUrl), pszUnescaped, pcchUnescaped, dwFlags); - if(!pszUrl || (!pszUnescaped && !(dwFlags & URL_UNESCAPE_INPLACE))|| !pcchUnescaped) - return E_INVALIDARG; + if(!pszUrl) return E_INVALIDARG; if(dwFlags & URL_UNESCAPE_INPLACE) dst = pszUrl; else + { + if (!pszUnescaped || !pcchUnescaped) return E_INVALIDARG; dst = pszUnescaped; + } for(src = pszUrl, needed = 0; *src; src++, needed++) { if(dwFlags & URL_DONT_UNESCAPE_EXTRA_INFO &&