[PATCH 1/8] server: Allocate extra_bytes separatelly from window struct.
Huw Davies
huw at codeweavers.com
Tue Feb 8 05:45:00 CST 2022
On Tue, Feb 08, 2022 at 12:26:46PM +0100, Jacek Caban wrote:
>
> Signed-off-by: Jacek Caban <jacek at codeweavers.com>
> ---
> We will eventually use window_shared for that when it's ready.
>
> server/window.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/server/window.c b/server/window.c
> index 7ea91d2a7dc..366f1fd9c44 100644
> --- a/server/window.c
> +++ b/server/window.c
> @@ -93,7 +93,7 @@ struct window
> int prop_alloc; /* number of allocated window properties */
> struct property *properties; /* window properties array */
> int nb_extra_bytes; /* number of extra bytes */
> - char extra_bytes[1]; /* extra bytes storage */
> + char *extra_bytes; /* extra bytes storage */
> };
>
> /* flags that can be set by the client */
> @@ -483,7 +483,8 @@ static struct window *create_window( struct window *parent, struct window *owner
> goto failed;
> }
>
> - if (!(win = mem_alloc( sizeof(*win) + extra_bytes - 1 ))) goto failed;
> + if (!(win = mem_alloc( sizeof(*win) ))) goto failed;
> + if (extra_bytes && !(win->extra_bytes = mem_alloc( extra_bytes ))) goto failed;
> if (!(win->handle = alloc_user_handle( win, USER_WINDOW ))) goto failed;
Don't you need to NULL-init win->extra_bytes in the !extra_bytes case (at
the very least for the failed: block below).
> win->parent = parent;
> @@ -553,6 +554,7 @@ failed:
> if (win)
> {
> if (win->handle) free_user_handle( win->handle );
> + free( win->extra_bytes );
> free( win );
> }
> release_object( desktop );
> @@ -1920,6 +1922,11 @@ void destroy_window( struct window *win )
> if (win->update_region) free_region( win->update_region );
> if (win->class) release_class( win->class );
> free( win->text );
> + if (win->nb_extra_bytes)
> + {
> + memset( win->extra_bytes, 0x55, win->nb_extra_bytes );
> + free( win->extra_bytes );
> + }
> memset( win, 0x55, sizeof(*win) + win->nb_extra_bytes - 1 );
This should now just be sizeof(*win)
> free( win );
> }
Huw.
More information about the wine-devel
mailing list