From: Bernhard Übelacker bernhardu@mailbox.org
--- dlls/wininet/internet.c | 2 ++ dlls/wininet/tests/http.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 17a7ce9385e..545718cdafe 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -1055,6 +1055,8 @@ static DWORD APPINFO_QueryOption(object_header_t *hdr, DWORD option, void *buffe
TRACE("INTERNET_OPTION_USER_AGENT\n");
+ if(!size) return ERROR_INVALID_PARAMETER; + bufsize = *size;
if (unicode) { diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index d63f42e27d7..b368f2a7dcb 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -3149,6 +3149,25 @@ static void test_proxy_direct(int port) r = InternetSetOptionA(hi, INTERNET_OPTION_USER_AGENT, useragent, 1); ok(r, "failed to set useragent\n");
+ SetLastError(0xdeadbeef); + r = InternetQueryOptionA(hi, INTERNET_OPTION_USER_AGENT, NULL, NULL); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "got %lu\n", GetLastError()); + ok(!r, "unexpected success\n"); + + sz = 0; + SetLastError(0xdeadbeef); + r = InternetQueryOptionA(hi, INTERNET_OPTION_USER_AGENT, NULL, &sz); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %lu\n", GetLastError()); + ok(!r, "unexpected success\n"); + ok(sz == strlen(useragent) + 1, "got %lu\n", sz); + + sz = 0xbeef; + SetLastError(0xdeadbeef); + r = InternetQueryOptionA(hi, INTERNET_OPTION_USER_AGENT, NULL, &sz); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %lu\n", GetLastError()); + ok(!r, "unexpected success\n"); + ok(sz == strlen(useragent) + 1, "got %lu\n", sz); + buffer[0] = 0; sz = 0; SetLastError(0xdeadbeef);