diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index d06298f..bb5e550 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -2029,7 +2029,10 @@ DWORD INET_QueryOption(DWORD option, void *buffer, DWORD *size, BOOL unicode) TRACE("INTERNET_OPTION_REQUEST_FLAGS\n"); if (*size < sizeof(ULONG)) + { + *size = sizeof(ULONG); return ERROR_INSUFFICIENT_BUFFER; + } *(ULONG*)buffer = 4; *size = sizeof(ULONG); @@ -2038,7 +2041,10 @@ DWORD INET_QueryOption(DWORD option, void *buffer, DWORD *size, BOOL unicode) case INTERNET_OPTION_HTTP_VERSION: if (*size < sizeof(HTTP_VERSION_INFO)) + { + *size = sizeof(HTTP_VERSION_INFO); return ERROR_INSUFFICIENT_BUFFER; + } /* * Presently hardcoded to 1.1 @@ -2053,7 +2059,10 @@ DWORD INET_QueryOption(DWORD option, void *buffer, DWORD *size, BOOL unicode) FIXME("INTERNET_OPTION_CONNECTED_STATE: semi-stub\n"); if (*size < sizeof(ULONG)) + { + *size = sizeof(ULONG); return ERROR_INSUFFICIENT_BUFFER; + } *(ULONG*)buffer = INTERNET_STATE_CONNECTED; *size = sizeof(ULONG); @@ -2102,7 +2111,10 @@ DWORD INET_QueryOption(DWORD option, void *buffer, DWORD *size, BOOL unicode) TRACE("INTERNET_OPTION_VERSION\n"); if (*size < sizeof(INTERNET_VERSION_INFO)) + { + *size = sizeof(INTERNET_VERSION_INFO); return ERROR_INSUFFICIENT_BUFFER; + } memcpy(buffer, &info, sizeof(info)); *size = sizeof(info); diff --git a/dlls/wininet/tests/internet.c b/dlls/wininet/tests/internet.c index 14adc43..a104531 100644 --- a/dlls/wininet/tests/internet.c +++ b/dlls/wininet/tests/internet.c @@ -364,6 +364,43 @@ static void test_version(void) /* ############################### */ +static void test_InternetQueryOptionWNullBuffer(void) +{ + HINTERNET hinet; + DWORD len; + static const char useragent[] = {"Wininet Test"}; + int retval; + + hinet = InternetOpenW(useragent,0,NULL,NULL,0); + ok((hinet != 0x0),"InternetOpen Failed\n"); + + len=0; + retval=InternetQueryOptionW(hinet,INTERNET_OPTION_REQUEST_FLAGS,NULL,&len); + ok(len == sizeof(ULONG),"INTERNET_OPTION_REQUEST_FLAGS Got wrong length %d instead of %d\n",len,sizeof(ULONG)); + + len=0; + retval=InternetQueryOptionW(hinet,INTERNET_OPTION_HTTP_VERSION,NULL,&len); + ok(len == sizeof(HTTP_VERSION_INFO),"INTERNET_OPTION_HTTP_VERSION Got wrong length %d instead of %d\n",len,sizeof(HTTP_VERSION_INFO)); + + len=0; + retval=InternetQueryOptionW(hinet,INTERNET_OPTION_CONNECTED_STATE,NULL,&len); + ok(len == sizeof(ULONG),"INTERNET_OPTION_CONNECTED_STATE Got wrong length %d instead of %d\n",len,sizeof(ULONG)); + + len=0; + retval=InternetQueryOptionW(hinet,INTERNET_OPTION_PROXY,NULL,&len); + todo_wine{ + ok(len == sizeof(INTERNET_PROXY_INFO),"INTERNET_OPTION_PROXY Got wrong length %d instead of %d\n",len,sizeof(INTERNET_PROXY_INFO)); + } + + len=0; + retval=InternetQueryOptionW(hinet,INTERNET_OPTION_VERSION,NULL,&len); + ok(len == sizeof(INTERNET_VERSION_INFO),"INTERNET_OPTION_VERSION Got wrong length %d instead of %d\n",len,sizeof(INTERNET_VERSION_INFO)); + + InternetCloseHandle(hinet); +} + +/* ############################### */ + START_TEST(internet) { test_InternetCanonicalizeUrlA(); @@ -371,4 +408,5 @@ START_TEST(internet) test_get_cookie(); test_version(); test_null(); + test_InternetQueryOptionWNullBuffer(); } -- 1.6.0.1