From 15ec6d1d0bb8c4cb24a190ed34e63312a0623670 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 3 May 2013 22:30:36 -0700 Subject: [PATCH 2/5] Use _XEatDataWords to avoid overflow of rep.length bit shifting rep.length is a CARD32, so rep.length << 2 could overflow in 32-bit builds Signed-off-by: Alan Coopersmith --- configure.ac | 6 ++++++ src/XpExtUtil.h | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/configure.ac b/configure.ac index 50b029c..16b966c 100644 --- a/configure.ac +++ b/configure.ac @@ -45,6 +45,12 @@ AC_PROG_LIBTOOL # Check for X and print proto PKG_CHECK_MODULES(XPRINT, x11 xext xextproto xau printproto) +# Check for _XEatDataWords function that may be patched into older Xlib release +SAVE_LIBS="$LIBS" +LIBS="$XPRINT_LIBS" +AC_CHECK_FUNCS([_XEatDataWords]) +LIBS="$SAVE_LIBS" + AC_CONFIG_FILES([Makefile src/Makefile man/Makefile diff --git a/src/XpExtUtil.h b/src/XpExtUtil.h index d479a95..1889825 100644 --- a/src/XpExtUtil.h +++ b/src/XpExtUtil.h @@ -48,6 +48,20 @@ extern char *_xpstrdup( const char * /* str */ ); +#ifndef HAVE__XEATDATAWORDS +#include /* for LONG64 on 64-bit platforms */ +#include + +static inline void _XEatDataWords(Display *dpy, unsigned long n) +{ +# ifndef LONG64 + if (n >= (ULONG_MAX >> 2)) + _XIOError(dpy); +# endif + _XEatData (dpy, n << 2); +} +#endif + _XFUNCPROTOEND #endif /* _XPEXTUTIL_H */ -- 1.8.2.3