comctl32: Don't crash when getting a bad image list handle. (try 2)
Nikolay Sivov
bunglehead at gmail.com
Mon Sep 19 08:39:40 CDT 2011
On 9/19/2011 17:32, Francois Gouget wrote:
> ---
>
> Don't return from inside the block this time.
>
> dlls/comctl32/imagelist.c | 13 ++++++++++++-
> dlls/comctl32/tests/imagelist.c | 17 +++++++++++++++--
> 2 files changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c
> index ec62370..83b8b44 100644
> --- a/dlls/comctl32/imagelist.c
> +++ b/dlls/comctl32/imagelist.c
> @@ -54,6 +54,7 @@
> #include "commoncontrols.h"
> #include "imagelist.h"
> #include "wine/debug.h"
> +#include "wine/exception.h"
>
> WINE_DEFAULT_DEBUG_CHANNEL(imagelist);
>
> @@ -3587,7 +3588,17 @@ static const IImageListVtbl ImageListImpl_Vtbl = {
>
> static inline BOOL is_valid(HIMAGELIST himl)
> {
> - return himl&& himl->lpVtbl ==&ImageListImpl_Vtbl;
> + BOOL valid;
> + __TRY
> + {
> + valid = himl&& himl->lpVtbl ==&ImageListImpl_Vtbl;
> + }
> + __EXCEPT_PAGE_FAULT
> + {
> + valid = FALSE;
> + }
> + __ENDTRY
> + return valid;
> }
Maybe use IsBadReadPtr() with sizeof(void*) is better? You need only
vtable pointer to be accessible.
More information about the wine-devel
mailing list