Jacek Caban : winhttp: Modify index only if query_headers succeeded.
Alexandre Julliard
julliard at winehq.org
Wed Sep 19 16:28:13 CDT 2018
Module: wine
Branch: master
Commit: f76208879e073226a8c55dff9ed4d52497538840
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f76208879e073226a8c55dff9ed4d52497538840
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 19 16:17:46 2018 +0200
winhttp: Modify index only if query_headers succeeded.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winhttp/request.c | 3 +--
dlls/winhttp/tests/winhttp.c | 39 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 80694da..72cebdd 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -766,7 +766,6 @@ static BOOL query_headers( request_t *request, DWORD level, LPCWSTR name, LPVOID
set_last_error( ERROR_WINHTTP_HEADER_NOT_FOUND );
return FALSE;
}
- if (index) *index += 1;
if (level & WINHTTP_QUERY_FLAG_NUMBER)
{
if (!buffer || sizeof(int) > *buflen)
@@ -813,6 +812,7 @@ static BOOL query_headers( request_t *request, DWORD level, LPCWSTR name, LPVOID
}
*buflen = len;
}
+ if (ret && index) *index += 1;
return ret;
}
@@ -902,7 +902,6 @@ static BOOL query_auth_schemes( request_t *request, DWORD level, LPDWORD support
query_headers( request, level, NULL, NULL, &size, &index );
if (get_last_error() != ERROR_INSUFFICIENT_BUFFER) break;
- index--;
if (!(buffer = heap_alloc( size ))) return FALSE;
if (!query_headers( request, level, NULL, buffer, &size, &index ))
{
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index 1c72c07..5f0935f 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -33,6 +33,7 @@
#include <httprequestid.h>
#include "wine/test.h"
+#include "wine/heap.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
@@ -42,6 +43,22 @@ static const WCHAR test_winehq[] = {'t','e','s','t','.','w','i','n','e','h','q',
static const WCHAR test_winehq_https[] = {'h','t','t','p','s',':','/','/','t','e','s','t','.','w','i','n','e','h','q','.','o','r','g',':','4','4','3',0};
static const WCHAR localhostW[] = {'l','o','c','a','l','h','o','s','t',0};
+static WCHAR *a2w(const char *str)
+{
+ int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
+ WCHAR *ret = heap_alloc(len * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+ return ret;
+}
+
+static int strcmp_wa(const WCHAR *str1, const char *stra)
+{
+ WCHAR *str2 = a2w(stra);
+ int r = lstrcmpW(str1, str2);
+ heap_free(str2);
+ return r;
+}
+
static BOOL proxy_active(void)
{
WINHTTP_PROXY_INFO proxy_info;
@@ -2736,9 +2753,12 @@ static void test_basic_authentication(int port)
static void test_multi_authentication(int port)
{
static const WCHAR multiauthW[] = {'/','m','u','l','t','i','a','u','t','h',0};
+ static const WCHAR www_authenticateW[] =
+ {'W','W','W','-','A','u','t','h','e','n','t','i','c','a','t','e',0};
static const WCHAR getW[] = {'G','E','T',0};
HINTERNET ses, con, req;
- DWORD supported, first, target;
+ DWORD supported, first, target, size, index;
+ WCHAR buf[512];
BOOL ret;
ses = WinHttpOpen(test_useragent, WINHTTP_ACCESS_TYPE_NO_PROXY, NULL, NULL, 0);
@@ -2764,6 +2784,22 @@ static void test_multi_authentication(int port)
ok(target == WINHTTP_AUTH_TARGET_SERVER, "got %x\n", target);
ok(first == WINHTTP_AUTH_SCHEME_BASIC, "got %x\n", first);
+ index = 0;
+ size = sizeof(buf);
+ ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_CUSTOM, www_authenticateW, buf, &size, &index);
+ ok(ret, "expected success\n");
+ ok(!strcmp_wa(buf, "Bearer"), "buf = %s\n", wine_dbgstr_w(buf));
+ ok(size == lstrlenW(buf) * sizeof(WCHAR), "size = %u\n", size);
+ ok(index == 1, "index = %u\n", index);
+
+ index = 0;
+ size = 0xdeadbeef;
+ ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_CUSTOM, www_authenticateW, NULL, &size, &index);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "WinHttpQueryHeaders returned %x(%u)\n", ret, GetLastError());
+ ok(size == (lstrlenW(buf) + 1) * sizeof(WCHAR), "size = %u\n", size);
+ ok(index == 0, "index = %u\n", index);
+
WinHttpCloseHandle(req);
WinHttpCloseHandle(con);
WinHttpCloseHandle(ses);
@@ -3087,6 +3123,7 @@ static void test_bad_header( int port )
content_typeW, buffer, &len, &index );
ok( ret, "failed to query headers %u\n", GetLastError() );
ok( !lstrcmpW( buffer, text_htmlW ), "got %s\n", wine_dbgstr_w(buffer) );
+ ok( index == 1, "index = %u\n", index );
WinHttpCloseHandle( req );
WinHttpCloseHandle( con );
More information about the wine-cvs
mailing list