From: Maarten Lankhorst <maarten.lankho...@ubuntu.com> Signed-off-by: Maarten Lankhorst <maarten.lankho...@ubuntu.com> --- 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); + } + } + } + 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 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel