winhttp: Ignore unknown schemes in WinHttpQueryAuthSchemes.
Hans Leidekker
hans at codeweavers.com
Thu Apr 6 02:38:12 CDT 2017
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
dlls/winhttp/request.c | 16 ++++++++++------
dlls/winhttp/tests/winhttp.c | 11 ++++++-----
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 3cdb6ab..fc04794 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -1311,7 +1311,7 @@ static DWORD auth_scheme_from_header( WCHAR *header )
static BOOL query_auth_schemes( request_t *request, DWORD level, LPDWORD supported, LPDWORD first )
{
- DWORD index = 0;
+ DWORD index = 0, supported_schemes = 0, first_scheme = 0;
BOOL ret = FALSE;
for (;;)
@@ -1332,15 +1332,19 @@ static BOOL query_auth_schemes( request_t *request, DWORD level, LPDWORD support
}
scheme = auth_scheme_from_header( buffer );
heap_free( buffer );
- if (!scheme) break;
+ if (!scheme) continue;
- if (first && index == 1)
- *first = *supported = scheme;
- else
- *supported |= scheme;
+ if (!first_scheme) first_scheme = scheme;
+ supported_schemes |= scheme;
ret = TRUE;
}
+
+ if (ret)
+ {
+ *supported = supported_schemes;
+ *first = first_scheme;
+ }
return ret;
}
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index 9802297..a5eff11 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -2523,7 +2523,7 @@ static void test_multi_authentication(int port)
static const WCHAR multiauthW[] = {'/','m','u','l','t','i','a','u','t','h',0};
static const WCHAR getW[] = {'G','E','T',0};
HINTERNET ses, con, req;
- DWORD supported = 10, first = 9, target = 8;
+ DWORD supported, first, target;
BOOL ret;
ses = WinHttpOpen(test_useragent, WINHTTP_ACCESS_TYPE_NO_PROXY, NULL, NULL, 0);
@@ -2542,11 +2542,12 @@ static void test_multi_authentication(int port)
ret = WinHttpReceiveResponse(req, NULL);
ok(ret, "expected success\n");
+ supported = first = target = 0xdeadbeef;
ret = WinHttpQueryAuthSchemes(req, &supported, &first, &target);
- todo_wine ok(ret, "expected success\n");
- todo_wine ok(supported == (WINHTTP_AUTH_SCHEME_BASIC | WINHTTP_AUTH_SCHEME_NTLM), "got %x\n", supported);
- todo_wine ok(target == WINHTTP_AUTH_TARGET_SERVER, "got %x\n", target);
- todo_wine ok(first == 1, "got %x\n", first);
+ ok(ret, "expected success\n");
+ ok(supported == (WINHTTP_AUTH_SCHEME_BASIC | WINHTTP_AUTH_SCHEME_NTLM), "got %x\n", supported);
+ ok(target == WINHTTP_AUTH_TARGET_SERVER, "got %x\n", target);
+ ok(first == WINHTTP_AUTH_SCHEME_BASIC, "got %x\n", first);
WinHttpCloseHandle(req);
WinHttpCloseHandle(con);
--
2.1.4
More information about the wine-patches
mailing list