diff --git a/modules/rostests/winetests/winhttp/winhttp.c b/modules/rostests/winetests/winhttp/winhttp.c index 776ee53e379..6b038b82ac7 100644 --- a/modules/rostests/winetests/winhttp/winhttp.c +++ b/modules/rostests/winetests/winhttp/winhttp.c @@ -4273,14 +4273,22 @@ static void test_IWinHttpRequest(int port) ok( hr == S_OK || hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_INVALID_SERVER_RESPONSE ) || hr == SEC_E_ILLEGAL_MESSAGE /* winxp */, "got %08x\n", hr ); if (hr != S_OK) goto done; - +ok(FALSE, "Line %d.\n", __LINE__); hr = IWinHttpRequest_get_ResponseText( req, &response ); ok( hr == S_OK, "got %08x\n", hr ); +#ifdef __REACTOS__ + if (SUCCEEDED(hr)) + { + ok( !memcmp(response, data_start, sizeof(data_start)), "got %s\n", wine_dbgstr_wn(response, 32) ); + SysFreeString( response ); + } +#else ok( !memcmp(response, data_start, sizeof(data_start)), "got %s\n", wine_dbgstr_wn(response, 32) ); SysFreeString( response ); +#endif IWinHttpRequest_Release( req ); - +ok(FALSE, "Line %d.\n", __LINE__); hr = CoCreateInstance( &CLSID_WinHttpRequest, NULL, CLSCTX_INPROC_SERVER, &IID_IWinHttpRequest, (void **)&req ); ok( hr == S_OK, "got %08x\n", hr ); @@ -4303,17 +4311,24 @@ static void test_IWinHttpRequest(int port) hr = IWinHttpRequest_Send( req, data ); ok( hr == S_OK, "got %08x\n", hr ); SysFreeString( V_BSTR( &data ) ); - +ok(FALSE, "Line %d.\n", __LINE__); hr = IWinHttpRequest_get_ResponseText( req, &response ); ok( hr == S_OK, "got %08x\n", hr ); +#ifdef __REACTOS__ + if (SUCCEEDED(hr)) + { + ok( !memcmp( response, unauthW, sizeof(unauthW) ), "got %s\n", wine_dbgstr_w(response) ); + SysFreeString( response ); + } +#else ok( !memcmp( response, unauthW, sizeof(unauthW) ), "got %s\n", wine_dbgstr_w(response) ); SysFreeString( response ); - +#endif status = 0xdeadbeef; hr = IWinHttpRequest_get_Status( req, &status ); ok( hr == S_OK, "got %08x\n", hr ); ok( status == HTTP_STATUS_DENIED, "got %d\n", status ); - +ok(FALSE, "Line %d.\n", __LINE__); done: IWinHttpRequest_Release( req ); CoUninitialize(); diff --git a/sdk/include/reactos/wine/test.h b/sdk/include/reactos/wine/test.h index 8b9035adfcf..3ca746221dc 100644 --- a/sdk/include/reactos/wine/test.h +++ b/sdk/include/reactos/wine/test.h @@ -26,6 +26,11 @@ #include #include +#ifndef _STRSAFE_H_INCLUDED_ +#include +#include +#endif + #ifdef __WINE_CONFIG_H #error config.h should not be used in Wine tests #endif @@ -634,30 +639,35 @@ const char *wine_dbgstr_an( const CHAR *str, intptr_t n ) return res; } -const char *wine_dbgstr_wn( const WCHAR *str, intptr_t n ) +const char *wine_dbgstr_wn( const WCHAR *str, int n ) { - char *dst, *res; - size_t size; + char *res; + size_t CbLength = 0; + HRESULT result; + static const char hex[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + char buffer[300], *dst = buffer; + if (!str) return "(null)"; if (!((ULONG_PTR)str >> 16)) { - if (!str) return "(null)"; res = get_temp_buffer( 6 ); sprintf( res, "#%04x", LOWORD(str) ); return res; } - if (n == -1) + if (IsBadStringPtrW(str,n)) return "(invalid)"; + if (n == -1) for (n = 0; str[n]; n++) ; + result = StringCbLengthA((STRSAFE_LPCSTR)str, sizeof(buffer)/5, &CbLength); + if (result == S_OK) { - const WCHAR *end = str; - while (*end) end++; - n = end - str; + n = min(n, CbLength); + } + else + { + return "(invalid)"; } - if (n < 0) n = 0; - size = 12 + min( 300, n * 5 ); - dst = res = get_temp_buffer( size ); *dst++ = 'L'; *dst++ = '"'; - while (n-- > 0 && dst <= res + size - 10) + while (n-- > 0 && dst <= buffer + sizeof(buffer) - 10) { WCHAR c = *str++; switch (c) @@ -668,14 +678,15 @@ const char *wine_dbgstr_wn( const WCHAR *str, intptr_t n ) case '"': *dst++ = '\\'; *dst++ = '"'; break; case '\\': *dst++ = '\\'; *dst++ = '\\'; break; default: - if (c >= ' ' && c <= 126) - *dst++ = (char)c; - else + if (c < ' ' || c >= 127) { *dst++ = '\\'; - sprintf(dst,"%04x",c); - dst+=4; + *dst++ = hex[(c >> 12) & 0x0f]; + *dst++ = hex[(c >> 8) & 0x0f]; + *dst++ = hex[(c >> 4) & 0x0f]; + *dst++ = hex[c & 0x0f]; } + else *dst++ = (char)c; } } *dst++ = '"'; @@ -685,8 +696,11 @@ const char *wine_dbgstr_wn( const WCHAR *str, intptr_t n ) *dst++ = '.'; *dst++ = '.'; } - *dst++ = 0; - release_temp_buffer( res, dst - res ); + *dst = 0; + + StringCbLengthA(buffer + 1, sizeof(buffer), &CbLength); + res = get_temp_buffer(CbLength); + StringCchCopyA(res, sizeof(buffer), buffer); return res; }