Module: wine Branch: master Commit: 0c75ead3e8123841b358cea7822dc128b2e4fc36 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c75ead3e8123841b358cea782...
Author: Rob Shearman robertshearman@gmail.com Date: Tue Oct 7 15:39:33 2008 +0100
wininet: Validate parameters passed to RetrieveUrlCacheEntryInfoA/W.
Add tests for this.
---
dlls/wininet/tests/urlcache.c | 25 +++++++++++++++++++++++++ dlls/wininet/urlcache.c | 14 ++++++++++++++ 2 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/dlls/wininet/tests/urlcache.c b/dlls/wininet/tests/urlcache.c index d264b91..44852f7 100644 --- a/dlls/wininet/tests/urlcache.c +++ b/dlls/wininet/tests/urlcache.c @@ -113,6 +113,7 @@ static void test_GetUrlCacheEntryInfoExA(void) check_cache_entry_infoA("GetUrlCacheEntryInfoEx", lpCacheEntryInfo);
cbCacheEntryInfo = 100000; + SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0); ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n"); ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetUrlCacheEntryInfoEx should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError()); @@ -120,6 +121,29 @@ static void test_GetUrlCacheEntryInfoExA(void) HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo); }
+static void test_RetrieveUrlCacheEntryA(void) +{ + BOOL ret; + DWORD cbCacheEntryInfo; + + cbCacheEntryInfo = 0; + SetLastError(0xdeadbeef); + ret = RetrieveUrlCacheEntryFile(NULL, NULL, &cbCacheEntryInfo, 0); + ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = RetrieveUrlCacheEntryFile(TEST_URL, NULL, NULL, 0); + ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + cbCacheEntryInfo = 100000; + ret = RetrieveUrlCacheEntryFile(NULL, NULL, &cbCacheEntryInfo, 0); + ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); +} + static void test_urlcacheA(void) { BOOL ret; @@ -168,6 +192,7 @@ static void test_urlcacheA(void) test_find_url_cache_entriesA();
test_GetUrlCacheEntryInfoExA(); + test_RetrieveUrlCacheEntryA();
if (pDeleteUrlCacheEntryA) { diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index 792c7bc..9705769 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -1817,6 +1817,13 @@ BOOL WINAPI RetrieveUrlCacheEntryFileA( lpdwCacheEntryInfoBufferSize, dwReserved);
+ if (!lpszUrlName || !lpdwCacheEntryInfoBufferSize || + (!lpCacheEntryInfo && *lpdwCacheEntryInfoBufferSize)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + error = URLCacheContainers_FindContainerA(lpszUrlName, &pContainer); if (error != ERROR_SUCCESS) { @@ -1899,6 +1906,13 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW( lpdwCacheEntryInfoBufferSize, dwReserved);
+ if (!lpszUrlName || !lpdwCacheEntryInfoBufferSize || + (!lpCacheEntryInfo && *lpdwCacheEntryInfoBufferSize)) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + error = URLCacheContainers_FindContainerW(lpszUrlName, &pContainer); if (error != ERROR_SUCCESS) {