winex11.drv: Handle arbitrary length composed input.

Marcus Meissner meissner at suse.de
Wed Mar 19 04:20:21 CDT 2008


On Wed, Mar 19, 2008 at 06:16:36PM +0900, Kusanagi Kouichi wrote:
> Fix bug #9838. http://bugs.winehq.org/show_bug.cgi?id=9838
> ---
>  dlls/winex11.drv/keyboard.c |   25 ++++++++++++++++---------
>  dlls/winex11.drv/xim.c      |   16 ++++++++++------
>  2 files changed, 26 insertions(+), 15 deletions(-)
> 
> diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
> index 33640db..386a471 100644
> --- a/dlls/winex11.drv/keyboard.c
> +++ b/dlls/winex11.drv/keyboard.c
> @@ -1365,22 +1365,29 @@ void X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
>      wine_tsx11_lock();
>      /* Clients should pass only KeyPress events to XmbLookupString */
>      if (xic && event->type == KeyPress)
> +    {
>          ascii_chars = XmbLookupString(xic, event, Str, sizeof(Str), &keysym, &status);
> +
> +        if (status == XBufferOverflow)
> +        {
> +            char buf[ascii_chars];

You should not use dynamic sized arrays. Use HeapAlloc() to allocate them.

Ciao, Marcus



More information about the wine-devel mailing list