open-src/lib/libXfixes/CVE-2013-1983.patch
author Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
Wed, 15 May 2013 13:44:02 -0700
changeset 1345 d5dacbb8de2b
permissions -rw-r--r--
16673783 problem in X11/LIBRARIES 16674478 problem in X11/LIBRARIES
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1345
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     1
From b031e3b60fa1af9e49449f23d4a84395868be3ab Mon Sep 17 00:00:00 2001
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     2
From: Alan Coopersmith <[email protected]>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     3
Date: Sat, 13 Apr 2013 10:20:59 -0700
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     4
Subject: [PATCH:libXfixes 1/2] Use _XEatDataWords to avoid overflow of
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     5
 _XEatData calculations
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     6
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     7
rep.length is a CARD32, so rep.length << 2 could overflow in 32-bit builds
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     8
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
     9
Signed-off-by: Alan Coopersmith <[email protected]>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    10
---
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    11
 configure.ac    |    7 +++++++
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    12
 src/Cursor.c    |    4 ++--
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    13
 src/Region.c    |    2 +-
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    14
 src/Xfixesint.h |   14 ++++++++++++++
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    15
 4 files changed, 24 insertions(+), 3 deletions(-)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    16
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    17
diff --git a/configure.ac b/configure.ac
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    18
index b942ffa..bb8e976 100644
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    19
--- a/configure.ac
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    20
+++ b/configure.ac
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    21
@@ -57,6 +57,13 @@ AC_SUBST(FIXESEXT_VERSION)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    22
 # Obtain compiler/linker options for depedencies
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    23
 PKG_CHECK_MODULES(FIXESEXT, xproto [fixesproto >= $FIXESEXT_VERSION] xextproto x11)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    24
 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    25
+# Check for _XEatDataWords function that may be patched into older Xlib releases
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    26
+SAVE_LIBS="$LIBS"
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    27
+LIBS="$FIXESEXT_LIBS"
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    28
+AC_CHECK_FUNCS([_XEatDataWords])
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    29
+LIBS="$SAVE_LIBS"
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    30
+
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    31
+
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    32
 AC_CONFIG_FILES([Makefile
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    33
 		src/Makefile
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    34
 		man/Makefile
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    35
diff --git a/src/Cursor.c b/src/Cursor.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    36
index b3dfed1..641b747 100644
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    37
--- a/src/Cursor.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    38
+++ b/src/Cursor.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    39
@@ -113,7 +113,7 @@ XFixesGetCursorImage (Display *dpy)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    40
     image = (XFixesCursorImage *) Xmalloc (rlength);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    41
     if (!image)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    42
     {
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    43
-	_XEatData (dpy, nbytes);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    44
+	_XEatDataWords(dpy, rep.length);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    45
 	UnlockDisplay (dpy);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    46
 	SyncHandle ();
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    47
 	return NULL;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    48
@@ -191,7 +191,7 @@ XFixesGetCursorName (Display *dpy, Cursor cursor, Atom *atom)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    49
 	_XReadPad(dpy, name, (long)rep.nbytes);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    50
 	name[rep.nbytes] = '\0';
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    51
     } else {
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    52
-	_XEatData(dpy, (unsigned long) (rep.nbytes + 3) & ~3);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    53
+	_XEatDataWords(dpy, rep.length);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    54
 	name = (char *) NULL;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    55
     }
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    56
     UnlockDisplay(dpy);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    57
diff --git a/src/Region.c b/src/Region.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    58
index 042f966..cb0cf6e 100644
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    59
--- a/src/Region.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    60
+++ b/src/Region.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    61
@@ -338,7 +338,7 @@ XFixesFetchRegionAndBounds (Display	    *dpy,
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    62
     rects = Xmalloc (nrects * sizeof (XRectangle));
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    63
     if (!rects)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    64
     {
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    65
-	_XEatData (dpy, nbytes);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    66
+	_XEatDataWords(dpy, rep.length);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    67
 	UnlockDisplay (dpy);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    68
 	SyncHandle ();
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    69
 	return NULL;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    70
diff --git a/src/Xfixesint.h b/src/Xfixesint.h
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    71
index 8a4d5fd..7bf5bfd 100644
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    72
--- a/src/Xfixesint.h
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    73
+++ b/src/Xfixesint.h
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    74
@@ -60,4 +60,18 @@ XFixesFindDisplay (Display *dpy);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    75
 #define XFixesSimpleCheckExtension(dpy,i) \
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    76
   if (!XFixesHasExtension(i)) { return; }
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    77
 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    78
+#ifndef HAVE__XEATDATAWORDS
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    79
+#include <X11/Xmd.h>  /* for LONG64 on 64-bit platforms */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    80
+#include <limits.h>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    81
+
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    82
+static inline void _XEatDataWords(Display *dpy, unsigned long n)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    83
+{
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    84
+# ifndef LONG64
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    85
+    if (n >= (ULONG_MAX >> 2))
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    86
+        _XIOError(dpy);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    87
+# endif
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    88
+    _XEatData (dpy, n << 2);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    89
+}
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    90
+#endif
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    91
+
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    92
 #endif /* _XFIXESINT_H_ */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    93
-- 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    94
1.7.9.2
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    95
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    96
From c480fe3271873ec7471b0cbd680f4dac18ca8904 Mon Sep 17 00:00:00 2001
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    97
From: Alan Coopersmith <[email protected]>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    98
Date: Sat, 13 Apr 2013 10:24:08 -0700
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
    99
Subject: [PATCH:libXfixes 2/2] integer overflow in XFixesGetCursorImage()
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   100
 [CVE-2013-1983]
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   101
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   102
If the reported cursor dimensions or name length are too large, the
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   103
calculations to allocate memory for them may overflow, leaving us
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   104
writing beyond the bounds of the allocation.
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   105
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   106
Reported-by: Ilja Van Sprundel <[email protected]>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   107
Signed-off-by: Alan Coopersmith <[email protected]>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   108
---
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   109
 src/Cursor.c |   30 ++++++++++++++++++------------
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   110
 1 file changed, 18 insertions(+), 12 deletions(-)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   111
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   112
diff --git a/src/Cursor.c b/src/Cursor.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   113
index 641b747..33590b7 100644
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   114
--- a/src/Cursor.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   115
+++ b/src/Cursor.c
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   116
@@ -47,6 +47,7 @@
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   117
 #include <config.h>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   118
 #endif
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   119
 #include "Xfixesint.h"
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   120
+#include <limits.h>
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   121
 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   122
 void
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   123
 XFixesSelectCursorInput (Display	*dpy,
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   124
@@ -74,9 +75,9 @@ XFixesGetCursorImage (Display *dpy)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   125
     XFixesExtDisplayInfo		*info = XFixesFindDisplay (dpy);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   126
     xXFixesGetCursorImageAndNameReq	*req;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   127
     xXFixesGetCursorImageAndNameReply	rep;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   128
-    int					npixels;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   129
-    int					nbytes_name;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   130
-    int					nbytes, nread, rlength;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   131
+    size_t				npixels;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   132
+    size_t				nbytes_name;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   133
+    size_t				nbytes, nread, rlength;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   134
     XFixesCursorImage			*image;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   135
     char				*name;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   136
 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   137
@@ -101,16 +102,21 @@ XFixesGetCursorImage (Display *dpy)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   138
     }
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   139
     npixels = rep.width * rep.height;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   140
     nbytes_name = rep.nbytes;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   141
-    /* reply data length */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   142
-    nbytes = (long) rep.length << 2;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   143
-    /* bytes of actual data in the reply */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   144
-    nread = (npixels << 2) + nbytes_name;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   145
-    /* size of data returned to application */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   146
-    rlength = (sizeof (XFixesCursorImage) + 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   147
-	       npixels * sizeof (unsigned long) +
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   148
-	       nbytes_name + 1);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   149
+    if ((rep.length < (INT_MAX >> 2)) &&
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   150
+	npixels < (((INT_MAX >> 3) - sizeof (XFixesCursorImage) - 1)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   151
+		   - nbytes_name)) {
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   152
+	/* reply data length */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   153
+	nbytes = (size_t) rep.length << 2;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   154
+	/* bytes of actual data in the reply */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   155
+	nread = (npixels << 2) + nbytes_name;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   156
+	/* size of data returned to application */
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   157
+	rlength = (sizeof (XFixesCursorImage) +
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   158
+		   npixels * sizeof (unsigned long) +
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   159
+		   nbytes_name + 1);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   160
 
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   161
-    image = (XFixesCursorImage *) Xmalloc (rlength);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   162
+	image = Xmalloc (rlength);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   163
+    } else
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   164
+	image = NULL;
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   165
     if (!image)
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   166
     {
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   167
 	_XEatDataWords(dpy, rep.length);
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   168
d5dacbb8de2b 16673783 problem in X11/LIBRARIES
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents:
diff changeset
   169