urlmon: Fix incorrect pointer arithmetic (too conversative) in map_url_to_zone. (RESEND)

Joris Huizer joris_huizer at yahoo.com
Sun Jun 5 09:09:37 CDT 2011


On 06/04/2011 03:02 PM, Gerald Pfeifer wrote:
> Resending:  This really looks like a straightforward bug fix and the
> current code definitely wrong???
>
>
> The difference between two pointers (of the same type) is the number
> of elements, not the number of bytes.  Thus the code below was way
> incorrect, luckily only too conversative.
>
> Gerald
>
> ---
>   dlls/urlmon/sec_mgr.c |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/dlls/urlmon/sec_mgr.c b/dlls/urlmon/sec_mgr.c
> index 7b4bb35..75850ee 100644
> --- a/dlls/urlmon/sec_mgr.c
> +++ b/dlls/urlmon/sec_mgr.c
> @@ -529,7 +529,7 @@ static HRESULT map_url_to_zone(LPCWSTR url, DWORD *zone, LPWSTR *ret_url)
>           hres = CoInternetParseUrl(secur_url, PARSE_PATH_FROM_URL, 0, path,
>                   sizeof(path)/sizeof(WCHAR),&size, 0);
>
> -        if(SUCCEEDED(hres)&&  (ptr = strchrW(path, '\\'))&&  ptr-path<  sizeof(root)/sizeof(WCHAR)) {
> +        if(SUCCEEDED(hres)&&  (ptr = strchrW(path, '\\'))&&  ptr-path<  sizeof(root)) {
>               UINT type;
>
>               memcpy(root, path, (ptr-path)*sizeof(WCHAR));

Indeed, the difference between two pointers is the number of elements.
sizeof(root) is the number of bytes, sizeof(root)/sizeof(WCHAR) is the 
number of elements.

HTH,
Joris



More information about the wine-devel mailing list