From 096fa3b9f56a77cdbcabac1d0ce55143df653234 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Mon, 6 Oct 2008 15:48:04 +0200 Subject: [PATCH] wininet: Option INTERNET_OPTION_CALLBACK is not settable. --- dlls/wininet/internet.c | 22 +++++++++++++++------- dlls/wininet/tests/http.c | 13 ++++++++++++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 4b33ca6f770..b027c1ab9ce 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -2259,9 +2259,14 @@ BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption, { case INTERNET_OPTION_CALLBACK: { - INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer; - ret = (set_status_callback(lpwhh, callback, TRUE) != INTERNET_INVALID_STATUS_CALLBACK); - break; + if (!lpwhh) + { + INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); + return FALSE; + } + WININET_Release(lpwhh); + INTERNET_SetLastError(ERROR_INTERNET_OPTION_NOT_SETTABLE); + return FALSE; } case INTERNET_OPTION_HTTP_VERSION: { @@ -2384,12 +2389,15 @@ BOOL WINAPI InternetSetOptionA(HINTERNET hInternet, DWORD dwOption, case INTERNET_OPTION_CALLBACK: { LPWININETHANDLEHEADER lpwh; - INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer; - if (!(lpwh = WININET_GetObject(hInternet))) return FALSE; - r = (set_status_callback(lpwh, callback, FALSE) != INTERNET_INVALID_STATUS_CALLBACK); + if (!(lpwh = WININET_GetObject(hInternet))) + { + INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); + return FALSE; + } WININET_Release(lpwh); - return r; + INTERNET_SetLastError(ERROR_INTERNET_OPTION_NOT_SETTABLE); + return FALSE; } case INTERNET_OPTION_PROXY: { diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index b6677b60127..c9d1d6fbefd 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -1984,7 +1984,7 @@ static void test_open_url_async(void) { BOOL ret; HINTERNET ses, req; - DWORD size; + DWORD size, error; struct context ctx; ULONG type; @@ -1994,6 +1994,17 @@ static void test_open_url_async(void) ses = InternetOpen("AdvancedInstaller", 0, NULL, NULL, INTERNET_FLAG_ASYNC); ok(ses != NULL, "InternetOpen failed\n"); + SetLastError(0xdeadbeef); + ret = InternetSetOptionA(NULL, INTERNET_OPTION_CALLBACK, &cb, sizeof(DWORD_PTR)); + error = GetLastError(); + ok(!ret, "InternetSetOptionA succeeded\n"); + ok(error == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "got %u expected ERROR_INTERNET_INCORRECT_HANDLE_TYPE\n", error); + + ret = InternetSetOptionA(ses, INTERNET_OPTION_CALLBACK, &cb, sizeof(DWORD_PTR)); + error = GetLastError(); + ok(!ret, "InternetSetOptionA failed\n"); + ok(error == ERROR_INTERNET_OPTION_NOT_SETTABLE, "got %u expected ERROR_INTERNET_OPTION_NOT_SETTABLE\n", error); + pInternetSetStatusCallbackA(ses, cb); ResetEvent(ctx.event);