Module: wine Branch: master Commit: 24e426517edb1ba81cb34fdbe3e3b63787db74e5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=24e426517edb1ba81cb34fdbe3...
Author: Dmitry Timoshkov dmitry@codeweavers.com Date: Wed Sep 17 11:41:26 2008 +0900
winhttp: Move common code to the upper level, avoid accessing the buffer before the buffer size check, make the code conform to existing rules.
---
dlls/winhttp/session.c | 88 +++++++++++++++++++++++++----------------------- 1 files changed, 46 insertions(+), 42 deletions(-)
diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c index 4967aff..545ed04 100644 --- a/dlls/winhttp/session.c +++ b/dlls/winhttp/session.c @@ -85,12 +85,6 @@ static void session_destroy( object_header_t *hdr )
static BOOL session_query_option( object_header_t *hdr, DWORD option, LPVOID buffer, LPDWORD buflen ) { - if (!buflen) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - switch (option) { case WINHTTP_OPTION_REDIRECT_POLICY: @@ -98,7 +92,7 @@ static BOOL session_query_option( object_header_t *hdr, DWORD option, LPVOID buf if (!buffer || *buflen < sizeof(DWORD)) { *buflen = sizeof(DWORD); - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
@@ -108,19 +102,13 @@ static BOOL session_query_option( object_header_t *hdr, DWORD option, LPVOID buf } default: FIXME("unimplemented option %u\n", option); - SetLastError(ERROR_INVALID_PARAMETER); + set_last_error( ERROR_INVALID_PARAMETER ); return FALSE; } }
static BOOL session_set_option( object_header_t *hdr, DWORD option, LPVOID buffer, DWORD buflen ) { - if (!buffer) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - switch (option) { case WINHTTP_OPTION_PROXY: @@ -136,7 +124,7 @@ static BOOL session_set_option( object_header_t *hdr, DWORD option, LPVOID buffe
if (buflen != sizeof(policy)) { - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
@@ -146,11 +134,11 @@ static BOOL session_set_option( object_header_t *hdr, DWORD option, LPVOID buffe return TRUE; } case WINHTTP_OPTION_DISABLE_FEATURE: - SetLastError(ERROR_WINHTTP_INCORRECT_HANDLE_TYPE); + set_last_error( ERROR_WINHTTP_INCORRECT_HANDLE_TYPE ); return FALSE; default: FIXME("unimplemented option %u\n", option); - SetLastError(ERROR_INVALID_PARAMETER); + set_last_error( ERROR_INVALID_PARAMETER ); return FALSE; } } @@ -310,12 +298,6 @@ static void request_destroy( object_header_t *hdr )
static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buffer, LPDWORD buflen ) { - if (!buflen) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - switch (option) { case WINHTTP_OPTION_SECURITY_FLAGS: @@ -325,7 +307,7 @@ static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buf if (!buffer || *buflen < sizeof(flags)) { *buflen = sizeof(flags); - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
@@ -343,7 +325,7 @@ static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buf if (!buffer || *buflen < sizeof(cert)) { *buflen = sizeof(cert); - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
@@ -357,7 +339,7 @@ static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buf if (!buffer || *buflen < sizeof(DWORD)) { *buflen = sizeof(DWORD); - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
@@ -367,19 +349,13 @@ static BOOL request_query_option( object_header_t *hdr, DWORD option, LPVOID buf } default: FIXME("unimplemented option %u\n", option); - SetLastError(ERROR_INVALID_PARAMETER); + set_last_error( ERROR_INVALID_PARAMETER ); return FALSE; } }
static BOOL request_set_option( object_header_t *hdr, DWORD option, LPVOID buffer, DWORD buflen ) { - if (!buffer) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - switch (option) { case WINHTTP_OPTION_PROXY: @@ -391,49 +367,52 @@ static BOOL request_set_option( object_header_t *hdr, DWORD option, LPVOID buffe } case WINHTTP_OPTION_DISABLE_FEATURE: { - DWORD disable = *(DWORD *)buffer; + DWORD disable;
if (buflen != sizeof(DWORD)) { - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
+ disable = *(DWORD *)buffer; TRACE("0x%x\n", disable); hdr->disable_flags |= disable; return TRUE; } case WINHTTP_OPTION_AUTOLOGON_POLICY: { - DWORD policy = *(DWORD *)buffer; + DWORD policy;
if (buflen != sizeof(DWORD)) { - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
+ policy = *(DWORD *)buffer; TRACE("0x%x\n", policy); hdr->logon_policy = policy; return TRUE; } case WINHTTP_OPTION_REDIRECT_POLICY: { - DWORD policy = *(DWORD *)buffer; + DWORD policy;
if (buflen != sizeof(DWORD)) { - SetLastError(ERROR_INSUFFICIENT_BUFFER); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); return FALSE; }
+ policy = *(DWORD *)buffer; TRACE("0x%x\n", policy); hdr->redirect_policy = policy; return TRUE; } default: FIXME("unimplemented option %u\n", option); - SetLastError(ERROR_INVALID_PARAMETER); + set_last_error( ERROR_INVALID_PARAMETER ); return TRUE; } } @@ -531,10 +510,23 @@ static BOOL query_option( object_header_t *hdr, DWORD option, LPVOID buffer, LPD { BOOL ret = FALSE;
+ if (!buflen) + { + set_last_error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + switch (option) { case WINHTTP_OPTION_CONTEXT_VALUE: { + if (!buffer || *buflen < sizeof(DWORD_PTR)) + { + *buflen = sizeof(DWORD_PTR); + set_last_error( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } + *(DWORD_PTR *)buffer = hdr->context; *buflen = sizeof(DWORD_PTR); return TRUE; @@ -544,7 +536,7 @@ static BOOL query_option( object_header_t *hdr, DWORD option, LPVOID buffer, LPD else { FIXME("unimplemented option %u\n", option); - SetLastError(ERROR_WINHTTP_INCORRECT_HANDLE_TYPE); + set_last_error( ERROR_WINHTTP_INCORRECT_HANDLE_TYPE ); return FALSE; } break; @@ -578,10 +570,22 @@ static BOOL set_option( object_header_t *hdr, DWORD option, LPVOID buffer, DWORD { BOOL ret = TRUE;
+ if (!buffer) + { + set_last_error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + switch (option) { case WINHTTP_OPTION_CONTEXT_VALUE: { + if (buflen != sizeof(DWORD_PTR)) + { + set_last_error( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } + hdr->context = *(DWORD_PTR *)buffer; return TRUE; } @@ -590,7 +594,7 @@ static BOOL set_option( object_header_t *hdr, DWORD option, LPVOID buffer, DWORD else { FIXME("unimplemented option %u\n", option); - SetLastError(ERROR_WINHTTP_INCORRECT_HANDLE_TYPE); + set_last_error( ERROR_WINHTTP_INCORRECT_HANDLE_TYPE ); return FALSE; } break;