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