Rob Shearman : wininet: Validate parameters passed to RetrieveUrlCacheEntryInfoA/W.
Alexandre Julliard
julliard at winehq.org
Wed Oct 8 08:32:32 CDT 2008
Module: wine
Branch: master
Commit: 0c75ead3e8123841b358cea7822dc128b2e4fc36
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c75ead3e8123841b358cea7822dc128b2e4fc36
Author: Rob Shearman <robertshearman at 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)
{
More information about the wine-cvs
mailing list