On Thu, Mar 16, 2017 at 12:29:44PM +0200, Timo Aaltonen wrote:
> From: Maarten Lankhorst <[email protected]>
> 
> Signed-off-by: Maarten Lankhorst <[email protected]>
> ---
>  dix/touch.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/dix/touch.c b/dix/touch.c
> index 37902bd..efc7ef9 100644
> --- a/dix/touch.c
> +++ b/dix/touch.c
> @@ -430,11 +430,25 @@ TouchEventHistoryPush(TouchPointInfoPtr ti, const 
> DeviceEvent *ev)
>      if (ev->flags & (TOUCH_CLIENT_ID | TOUCH_REPLAYING))
>          return;
>  
> +    if (ti->history_elements == ti->history_size - 1) {
> +        DeviceEvent *hist = NULL;
> +        size_t sz = ti->history_size * 2;
> +
> +        if (sz < 10000) {
> +            hist = realloc(ti->history, sz * sizeof(*hist));
> +
> +            if (hist) {
> +                ti->history = hist;
> +                ti->history_size = sz;
> +                memset(&hist[sz/2], 0, sizeof(*hist)*sz/2);

swap these around and memset first based on ti->history_elements and a
proper size-elements calculation. This avoids possible errors if history
size is ever an odd number (never going to happen, but...)

but do we even need the memset? if we're not copying the events correctly
and rely on zero memory then we'll have other problems.

Cheers,
   Peter


> +            }
> +        }
> +    }
> +
>      ti->history[ti->history_elements++] = *ev;
> -    /* FIXME: proper overflow fixes */
>      if (ti->history_elements > ti->history_size - 1) {
>          ti->history_elements = ti->history_size - 1;
> -        DebugF("source device %d: history size %zu overflowing for touch 
> %u\n",
> +        ErrorF("source device %d: history size %zu overflowing for touch 
> %u\n",
>                 ti->sourceid, ti->history_size, ti->client_id);
>      }
>  }
> -- 
> 2.7.4
> 
> _______________________________________________
> [email protected]: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
> 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to