From 2539237d557bfce00dec70b783fc5068c3a76b2e Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 10 Oct 2008 22:21:25 -0700 Subject: [PATCH 2/4] shlwapi: Fix AssocQueryStringW parameter checking. --- dlls/shlwapi/assoc.c | 34 ++++++++++++++++------------------ dlls/shlwapi/tests/assoc.c | 16 ++++++++-------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/dlls/shlwapi/assoc.c b/dlls/shlwapi/assoc.c index e3c3830..23ece70 100644 --- a/dlls/shlwapi/assoc.c +++ b/dlls/shlwapi/assoc.c @@ -244,7 +244,7 @@ HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc, debugstr_w(pszExtra), pszOut, pcchOut); if (!pcchOut) - return E_INVALIDARG; + return E_UNEXPECTED; lpAssoc = IQueryAssociations_Constructor(); @@ -290,7 +290,7 @@ HRESULT WINAPI AssocQueryStringA(ASSOCF cfFlags, ASSOCSTR str, LPCSTR pszAssoc, debugstr_a(pszExtra), pszOut, pcchOut); if (!pcchOut) - hRet = E_INVALIDARG; + hRet = E_UNEXPECTED; else if (SHLWAPI_ParamAToW(pszAssoc, szAssocW, MAX_PATH, &lpszAssocW) && SHLWAPI_ParamAToW(pszExtra, szExtraW, MAX_PATH, &lpszExtraW)) { @@ -520,7 +520,7 @@ static HRESULT WINAPI IQueryAssociations_fnInit( { static const WCHAR szProgID[] = {'P','r','o','g','I','D',0}; IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface; - HRESULT hr; + LONG ret; TRACE("(%p)->(%d,%s,%p,%p)\n", iface, cfFlags, @@ -533,23 +533,21 @@ static HRESULT WINAPI IQueryAssociations_fnInit( FIXME("unsupported flags: %x\n", cfFlags); if (pszAssoc != NULL) { - hr = RegOpenKeyExW(HKEY_CLASSES_ROOT, - pszAssoc, - 0, - KEY_READ, - &This->hkeySource); - if (FAILED(hr)) - return HRESULT_FROM_WIN32(ERROR_NO_ASSOCIATION); + ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, + pszAssoc, + 0, + KEY_READ, + &This->hkeySource); + if (ret != ERROR_SUCCESS) + return E_FAIL; /* if this is not a prog id */ if ((*pszAssoc == '.') || (*pszAssoc == '{')) { - hr = RegOpenKeyExW(This->hkeySource, - szProgID, - 0, - KEY_READ, - &This->hkeyProgID); - if (FAILED(hr)) - FIXME("Don't know what to return\n"); + RegOpenKeyExW(This->hkeySource, + szProgID, + 0, + KEY_READ, + &This->hkeyProgID); } else This->hkeyProgID = This->hkeySource; @@ -561,7 +559,7 @@ static HRESULT WINAPI IQueryAssociations_fnInit( return S_OK; } else - return E_FAIL; + return E_INVALIDARG; } /************************************************************************** diff --git a/dlls/shlwapi/tests/assoc.c b/dlls/shlwapi/tests/assoc.c index 2b717d9..0236164 100644 --- a/dlls/shlwapi/tests/assoc.c +++ b/dlls/shlwapi/tests/assoc.c @@ -38,31 +38,31 @@ void test_getstring_bad(void) DWORD len; hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, NULL, open, NULL, &len); - todo_wine expect_hr(E_INVALIDARG, hr); + expect_hr(E_INVALIDARG, hr); hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, badBad, open, NULL, &len); - todo_wine expect_hr(E_FAIL, hr); + expect_hr(E_FAIL, hr); hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotBad, open, NULL, &len); - todo_wine expect_hr(E_FAIL, hr); + expect_hr(E_FAIL, hr); hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotHtml, invalid, NULL, &len); todo_wine expect_hr(0x80070002, hr); /* NOT FOUND */ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotHtml, open, NULL, NULL); - todo_wine expect_hr(E_UNEXPECTED, hr); + expect_hr(E_UNEXPECTED, hr); hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, NULL, open, NULL, &len); - todo_wine expect_hr(E_INVALIDARG, hr); + expect_hr(E_INVALIDARG, hr); hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, badBad, open, NULL, &len); - todo_wine expect_hr(E_FAIL, hr); + expect_hr(E_FAIL, hr); hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotBad, open, NULL, &len); - todo_wine expect_hr(E_FAIL, hr); + expect_hr(E_FAIL, hr); hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotHtml, invalid, NULL, &len); todo_wine expect_hr(0x80070002, hr); /* NOT FOUND */ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotHtml, open, NULL, NULL); - todo_wine expect_hr(E_UNEXPECTED, hr); + expect_hr(E_UNEXPECTED, hr); } void test_getstring_basic(void) -- 1.5.4.5