From a6f1ebfe4118d8502f1ae9f06c35fd55740d0aac Mon Sep 17 00:00:00 2001 From: Thomas Mullaly Date: Sun, 30 May 2010 11:06:10 -0400 Subject: [PATCH] urlmon/tests: Added test for invalid args to IUri_GetPropertyBSTR and IUri_GetPropertyDWORD. --- dlls/urlmon/Makefile.in | 2 +- dlls/urlmon/tests/uri.c | 37 +++++++++++++++++++++++++++++++++++-- dlls/urlmon/uri.c | 20 ++++++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/dlls/urlmon/Makefile.in b/dlls/urlmon/Makefile.in index 419745b7131..91277a571ee 100644 --- a/dlls/urlmon/Makefile.in +++ b/dlls/urlmon/Makefile.in @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = urlmon.dll IMPORTLIB = urlmon -IMPORTS = uuid ole32 rpcrt4 shlwapi wininet user32 advapi32 kernel32 ntdll +IMPORTS = uuid ole32 oleaut32 rpcrt4 shlwapi wininet user32 advapi32 kernel32 ntdll EXTRADEFS = -D_URLMON_ -DENTRY_PREFIX=URLMON_ -DPROXY_DELEGATION -DREGISTER_PROXY_DLL \ -DPROXY_CLSID_IS="{0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}}" diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c index 9124c1cdb49..3142a1b91cd 100644 --- a/dlls/urlmon/tests/uri.c +++ b/dlls/urlmon/tests/uri.c @@ -442,13 +442,40 @@ static void test_CreateUri_InvalidArgs(void) { } static void test_IUri_GetPropertyBSTR(void) { + IUri *uri = NULL; + HRESULT hr; DWORD i; + /* Make sure GetPropertyBSTR handles invalid args correctly. */ + hr = pCreateUri(http_urlW, 0, 0, &uri); + ok(hr == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x.\n", hr, S_OK); + if(SUCCEEDED(hr)) { + BSTR received = NULL; + + hr = IUri_GetPropertyBSTR(uri, Uri_PROPERTY_RAW_URI, NULL, 0); + ok(hr == E_POINTER, "Error: GetPropertyBSTR returned 0x%08x, expected 0x%08x.\n", hr, E_POINTER); + + /* Make sure it handles a invalid Uri_PROPERTY's correctly. */ + hr = IUri_GetPropertyBSTR(uri, Uri_PROPERTY_PORT, &received, 0); + ok(hr == S_OK, "Error: GetPropertyBSTR returned 0x%08x, expected 0x%08x.\n", hr, S_OK); + ok(received != NULL, "Error: Expected the string not to be NULL.\n"); + ok(!SysStringLen(received), "Error: Expected the string to be of len=0 but it was %d instead.\n", SysStringLen(received)); + SysFreeString(received); + + /* Make sure it handles the ZONE property correctly. */ + received = NULL; + hr = IUri_GetPropertyBSTR(uri, Uri_PROPERTY_ZONE, &received, 0); + ok(hr == S_FALSE, "Error: GetPropertyBSTR returned 0x%08x, expected 0x%08x.\n", hr, S_FALSE); + ok(received != NULL, "Error: Expected the string not to be NULL.\n"); + ok(!SysStringLen(received), "Error: Expected the string to be of len=0 but it was %d instead.\n", SysStringLen(received)); + SysFreeString(received); + } + if(uri) IUri_Release(uri); + for(i = 0; i < sizeof(uri_tests)/sizeof(uri_tests[0]); ++i) { uri_properties test = uri_tests[i]; - HRESULT hr; - IUri *uri = NULL; LPWSTR uriW; + uri = NULL; uriW = a2w(test.uri); hr = pCreateUri(uriW, test.create_flags, 0, &uri); @@ -505,8 +532,14 @@ static void test_IUri_GetPropertyDWORD(void) { hr = pCreateUri(http_urlW, 0, 0, &uri); ok(hr == S_OK, "Error: CreateUri returned 0x%08x, expected 0x%08x.\n", hr, S_OK); if(SUCCEEDED(hr)) { + DWORD received = 0xdeadbeef; + hr = IUri_GetPropertyDWORD(uri, Uri_PROPERTY_DWORD_START, NULL, 0); ok(hr == E_INVALIDARG, "Error: GetPropertyDWORD returned 0x%08x, expected 0x%08x.\n", hr, E_INVALIDARG); + + hr = IUri_GetPropertyDWORD(uri, Uri_PROPERTY_ABSOLUTE_URI, &received, 0); + ok(hr == E_INVALIDARG, "Error: GetPropertyDWORD returned 0x%08x, expected 0x%08x.\n", hr, E_INVALIDARG); + ok(received == 0, "Error: Expected received=%d but instead received=%d.\n", 0, received); } if(uri) IUri_Release(uri); diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c index 95ca9073e10..a87bd7ef31f 100644 --- a/dlls/urlmon/uri.c +++ b/dlls/urlmon/uri.c @@ -84,6 +84,21 @@ static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BST { Uri *This = URI_THIS(iface); FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags); + + if(!pbstrProperty) + return E_POINTER; + + if(uriProp > Uri_PROPERTY_STRING_LAST) { + /* Windows allocates an empty BSTR for invalid Uri_PROPERTY's. */ + *pbstrProperty = SysAllocStringLen(NULL, 0); + + /* It only returns S_FALSE for the ZONE property... */ + if(uriProp == Uri_PROPERTY_ZONE) + return S_FALSE; + else + return S_OK; + } + return E_NOTIMPL; } @@ -120,6 +135,11 @@ static HRESULT WINAPI Uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY uriProp, DW return E_NOTIMPL; } + if(uriProp < Uri_PROPERTY_DWORD_START) { + *pcchProperty = 0; + return E_INVALIDARG; + } + return E_NOTIMPL; }