Hans Leidekker : winhttp: Accept NULL buffer for size queries in WinHttpCreateUrl.
Alexandre Julliard
julliard at winehq.org
Fri Jan 27 14:12:23 CST 2017
Module: wine
Branch: master
Commit: 542998ee24fe05cf230288c47538ccf18807ec64
URL: http://source.winehq.org/git/wine.git/?a=commit;h=542998ee24fe05cf230288c47538ccf18807ec64
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri Jan 27 10:28:43 2017 +0100
winhttp: Accept NULL buffer for size queries in WinHttpCreateUrl.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winhttp/tests/url.c | 27 +++++++++++++++++++--------
dlls/winhttp/url.c | 8 ++++++--
2 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/dlls/winhttp/tests/url.c b/dlls/winhttp/tests/url.c
index b76e82c..6bde1de 100644
--- a/dlls/winhttp/tests/url.c
+++ b/dlls/winhttp/tests/url.c
@@ -118,7 +118,7 @@ static void WinHttpCreateUrl_test( void )
{
URL_COMPONENTS uc;
WCHAR *url;
- DWORD len;
+ DWORD len, err;
BOOL ret;
/* NULL components */
@@ -144,22 +144,33 @@ static void WinHttpCreateUrl_test( void )
ok( !ret, "expected failure\n" );
ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
- /* valid components, NULL url */
+ /* valid components, NULL url, insufficient length */
+ len = 0;
SetLastError( 0xdeadbeef );
ret = WinHttpCreateUrl( &uc, 0, NULL, &len );
ok( !ret, "expected failure\n" );
- ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER ||
- GetLastError() == ERROR_INVALID_PARAMETER,
- "expected ERROR_INSUFFICIENT_BUFFER or ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER got %u\n", GetLastError() );
+ ok( len == 57, "expected len 57 got %u\n", len );
+
+ /* valid components, NULL url, sufficient length */
+ SetLastError( 0xdeadbeef );
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, NULL, &len );
+ err = GetLastError();
+ ok( !ret, "expected failure\n" );
+ ok( err == ERROR_INVALID_PARAMETER || broken(err == ERROR_INSUFFICIENT_BUFFER) /* < win7 */,
+ "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( len == 256 || broken(len == 57) /* < win7 */, "expected len 256 got %u\n", len );
/* correct size, NULL url */
fill_url_components( &uc );
SetLastError( 0xdeadbeef );
ret = WinHttpCreateUrl( &uc, 0, NULL, &len );
+ err = GetLastError();
ok( !ret, "expected failure\n" );
- ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER ||
- GetLastError() == ERROR_INVALID_PARAMETER,
- "expected ERROR_INSUFFICIENT_BUFFER or ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( err == ERROR_INVALID_PARAMETER || broken(err == ERROR_INSUFFICIENT_BUFFER) /* < win7 */,
+ "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( len == 256 || broken(len == 57) /* < win7 */, "expected len 256 got %u\n", len );
/* valid components, allocated url, short length */
SetLastError( 0xdeadbeef );
diff --git a/dlls/winhttp/url.c b/dlls/winhttp/url.c
index e7bb2a5..32b30da 100644
--- a/dlls/winhttp/url.c
+++ b/dlls/winhttp/url.c
@@ -417,13 +417,12 @@ BOOL WINAPI WinHttpCreateUrl( LPURL_COMPONENTS uc, DWORD flags, LPWSTR url, LPDW
{
static const WCHAR formatW[] = {'%','u',0};
static const WCHAR twoslashW[] = {'/','/'};
-
DWORD len;
INTERNET_SCHEME scheme;
TRACE("%p, 0x%08x, %p, %p\n", uc, flags, url, required);
- if (!uc || uc->dwStructSize != sizeof(URL_COMPONENTS) || !required || !url)
+ if (!uc || uc->dwStructSize != sizeof(URL_COMPONENTS) || !required)
{
set_last_error( ERROR_INVALID_PARAMETER );
return FALSE;
@@ -437,6 +436,11 @@ BOOL WINAPI WinHttpCreateUrl( LPURL_COMPONENTS uc, DWORD flags, LPWSTR url, LPDW
set_last_error( ERROR_INSUFFICIENT_BUFFER );
return FALSE;
}
+ if (!url)
+ {
+ set_last_error( ERROR_INVALID_PARAMETER );
+ return FALSE;
+ }
url[0] = 0;
*required = len;
More information about the wine-cvs
mailing list