Robert Shearman : wininet:
Only access the URL in the cache by the provided offset.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Mar 31 05:08:41 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 4f40f1722605c745ce2c442e1f07a124b3415d03
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4f40f1722605c745ce2c442e1f07a124b3415d03
Author: Robert Shearman <rob at codeweavers.com>
Date: Thu Mar 30 19:55:15 2006 +0100
wininet: Only access the URL in the cache by the provided offset.
---
dlls/wininet/urlcache.c | 25 +++++++++++++------------
1 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c
index f143512..a4bdfa7 100644
--- a/dlls/wininet/urlcache.c
+++ b/dlls/wininet/urlcache.c
@@ -95,7 +95,7 @@ typedef struct _URL_CACHEFILE_ENTRY
DWORD dwUnknown2; /* usually zero */
DWORD dwExemptDelta; /* see INTERNET_CACHE_ENTRY_INFO::dwExemptDelta */
DWORD dwUnknown3; /* usually 0x60 */
- DWORD dwOffsetUrl; /* usually 0x68 */
+ DWORD dwOffsetUrl; /* offset of start of url from start of entry */
BYTE CacheDir; /* index of cache directory this url is stored in */
BYTE Unknown4; /* usually zero */
WORD wUnknown5; /* usually 0x1010 */
@@ -112,7 +112,8 @@ typedef struct _URL_CACHEFILE_ENTRY
WORD wUnknownTime; /* usually same as wLastSyncTime */
DWORD dwUnknown7; /* usually zero */
DWORD dwUnknown8; /* usually zero */
- CHAR szSourceUrlName[1]; /* start of url */
+ /* packing to dword align start of next field */
+ /* CHAR szSourceUrlName[]; (url) */
/* packing to dword align start of next field */
/* CHAR szLocalFileName[]; (local file name exluding path) */
/* packing to dword align start of next field */
@@ -939,9 +940,9 @@ static BOOL URLCache_CopyEntry(
ZeroMemory((LPBYTE)lpCacheEntryInfo + dwRequiredSize, 4 - (dwRequiredSize % 4));
dwRequiredSize = DWORD_ALIGN(dwRequiredSize);
if (bUnicode)
- lenUrl = MultiByteToWideChar(CP_ACP, 0, pUrlEntry->szSourceUrlName, -1, NULL, 0);
+ lenUrl = MultiByteToWideChar(CP_ACP, 0, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, -1, NULL, 0);
else
- lenUrl = strlen(pUrlEntry->szSourceUrlName);
+ lenUrl = strlen((LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl);
dwRequiredSize += lenUrl + 1;
/* FIXME: is source url optional? */
@@ -949,9 +950,9 @@ static BOOL URLCache_CopyEntry(
{
lpCacheEntryInfo->lpszSourceUrlName = (LPSTR)lpCacheEntryInfo + dwRequiredSize - lenUrl - 1;
if (bUnicode)
- MultiByteToWideChar(CP_ACP, 0, pUrlEntry->szSourceUrlName, -1, (LPWSTR)lpCacheEntryInfo->lpszSourceUrlName, lenUrl + 1);
+ MultiByteToWideChar(CP_ACP, 0, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, -1, (LPWSTR)lpCacheEntryInfo->lpszSourceUrlName, lenUrl + 1);
else
- memcpy(lpCacheEntryInfo->lpszSourceUrlName, pUrlEntry->szSourceUrlName, (lenUrl + 1) * sizeof(CHAR));
+ memcpy(lpCacheEntryInfo->lpszSourceUrlName, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, (lenUrl + 1) * sizeof(CHAR));
}
if ((dwRequiredSize % 4) && (dwRequiredSize < *lpdwBufferSize))
@@ -1398,7 +1399,7 @@ BOOL WINAPI GetUrlCacheEntryInfoA(
}
pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
- TRACE("Found URL: %s\n", debugstr_a(pUrlEntry->szSourceUrlName));
+ TRACE("Found URL: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl));
if (pUrlEntry->dwOffsetHeaderInfo)
TRACE("Header info: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
@@ -1483,7 +1484,7 @@ BOOL WINAPI GetUrlCacheEntryInfoW(LPCWST
}
pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
- TRACE("Found URL: %s\n", debugstr_a(pUrlEntry->szSourceUrlName));
+ TRACE("Found URL: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl));
TRACE("Header info: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
if (!URLCache_CopyEntry(
@@ -1704,7 +1705,7 @@ BOOL WINAPI RetrieveUrlCacheEntryFileA(
}
pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
- TRACE("Found URL: %s\n", pUrlEntry->szSourceUrlName);
+ TRACE("Found URL: %s\n", (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl);
TRACE("Header info: %s\n", (LPBYTE)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo);
pUrlEntry->dwHitRate++;
@@ -2035,7 +2036,7 @@ static BOOL WINAPI CommitUrlCacheEntryIn
LPURLCACHE_HEADER pHeader;
CACHEFILE_ENTRY * pEntry;
URL_CACHEFILE_ENTRY * pUrlEntry;
- DWORD dwBytesNeeded = sizeof(*pUrlEntry) - sizeof(pUrlEntry->szSourceUrlName);
+ DWORD dwBytesNeeded = DWORD_ALIGN(sizeof(*pUrlEntry));
DWORD dwOffsetLocalFileName = 0;
DWORD dwOffsetHeader = 0;
DWORD dwFileSizeLow = 0;
@@ -2177,7 +2178,7 @@ static BOOL WINAPI CommitUrlCacheEntryIn
pUrlEntry->dwHitRate = 0;
pUrlEntry->dwOffsetHeaderInfo = dwOffsetHeader;
pUrlEntry->dwOffsetLocalName = dwOffsetLocalFileName;
- pUrlEntry->dwOffsetUrl = sizeof(*pUrlEntry) - sizeof(pUrlEntry->szSourceUrlName);
+ pUrlEntry->dwOffsetUrl = DWORD_ALIGN(sizeof(*pUrlEntry));
pUrlEntry->dwSizeHigh = 0;
pUrlEntry->dwSizeLow = dwFileSizeLow;
pUrlEntry->dwSizeHigh = dwFileSizeHigh;
@@ -2200,7 +2201,7 @@ static BOOL WINAPI CommitUrlCacheEntryIn
pUrlEntry->dwUnknown8 = 0;
- strcpy(pUrlEntry->szSourceUrlName, achUrl);
+ strcpy((LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl, achUrl);
if (dwOffsetLocalFileName)
strcpy((LPSTR)((LPBYTE)pUrlEntry + dwOffsetLocalFileName), pchLocalFileName);
if (dwOffsetHeader)
More information about the wine-cvs
mailing list