Module: wine Branch: stable Commit: 1d5367666efda268502ee597e14c5bf9383e91f8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1d5367666efda268502ee597e1...
Author: Hans Leidekker hans@codeweavers.com Date: Thu Apr 6 09:38:12 2017 +0200
winhttp: Ignore unknown schemes in WinHttpQueryAuthSchemes.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 6b6ffb399a113a5125098671c1660e4c2c419d81) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
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 b2b72c7..e3c0fb4 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -1315,7 +1315,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 (;;) @@ -1336,15 +1336,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 9777bd9..3818582 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -2521,7 +2521,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); @@ -2540,11 +2540,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);