diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2013-04-13 11:05:27 -0700 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2013-04-13 11:05:27 -0700 |
commit | 46ed6283034b5b7d14584009453f5d974cfacf1e (patch) | |
tree | 978ba7fc4c7e9c4070a6be3a8dfc1cef8809707b | |
parent | 2aafac9474a0a0a0c39797862f823255918cf368 (diff) |
Use _XEatDataWords to eat data in error cases
Avoids having to do calculcations based on response contents
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | src/XRecord.c | 23 |
2 files changed, 23 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac index 7ef0153..d83d4d8 100644 --- a/configure.ac +++ b/configure.ac @@ -47,6 +47,12 @@ XORG_CHECK_SGML_DOCTOOLS(1.8) # Obtain compiler/linker options for depedencies PKG_CHECK_MODULES(XTST, x11 [xext >= 1.0.99.4] xi [recordproto >= 1.13.99.1] [xextproto >= 7.0.99.3] inputproto) +# Check for _XEatDataWords function that may be patched into older Xlib release +SAVE_LIBS="$LIBS" +LIBS="$XTST_LIBS" +AC_CHECK_FUNCS([_XEatDataWords]) +LIBS="$SAVE_LIBS" + # Determine if the source for man pages is available # It may already be present (tarball) or can be generated using xmlto AM_CONDITIONAL([INSTALL_MANPAGES], diff --git a/src/XRecord.c b/src/XRecord.c index b65451c..ba628b6 100644 --- a/src/XRecord.c +++ b/src/XRecord.c @@ -49,6 +49,9 @@ from The Open Group. * By Stephen Gildea, X Consortium, and Martha Zimet, NCD. */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif #include <stdio.h> #include <assert.h> #include <X11/Xlibint.h> @@ -56,6 +59,18 @@ from The Open Group. #include <X11/extensions/extutil.h> #include <X11/extensions/recordproto.h> #include <X11/extensions/record.h> +#include <limits.h> + +#ifndef HAVE__XEATDATAWORDS +static inline void _XEatDataWords(Display *dpy, unsigned long n) +{ +# ifndef LONG64 + if (n >= (ULONG_MAX >> 2)) + _XIOError(dpy); +# endif + _XEatData (dpy, n << 2); +} +#endif static XExtensionInfo _xrecord_info_data; static XExtensionInfo *xrecord_info = &_xrecord_info_data; @@ -427,7 +442,7 @@ XRecordGetContext(Display *dpy, XRecordContext context, ret = (XRecordState*)Xmalloc(sizeof(XRecordState)); if (!ret) { - /* XXX - eat data */ + _XEatDataWords (dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return 0; @@ -446,11 +461,7 @@ XRecordGetContext(Display *dpy, XRecordContext context, } if (!client_inf || !client_inf_str) { - for(i = 0; i < count; i++) - { - _XEatData (dpy, sizeof(xRecordClientInfo)); - _XEatData (dpy, SIZEOF(xRecordRange)); /* XXX - don't know how many */ - } + _XEatDataWords (dpy, rep.length); UnlockDisplay(dpy); XRecordFreeState(ret); SyncHandle(); |