aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/Xext/EVI.c
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-10-10 17:46:43 +0200
committerReinhard Tartler <siretart@tauware.de>2011-10-10 17:46:43 +0200
commit3d1c57d5ef429e51ab7a626540c30b81e74a8f17 (patch)
tree2589846dd73cb0a86156fc5f2575ea2373431a57 /nx-X11/programs/Xserver/Xext/EVI.c
parent844a4094f098684dd1da5bc11e73479fb61373a3 (diff)
downloadnx-libs-3d1c57d5ef429e51ab7a626540c30b81e74a8f17.tar.gz
nx-libs-3d1c57d5ef429e51ab7a626540c30b81e74a8f17.tar.bz2
nx-libs-3d1c57d5ef429e51ab7a626540c30b81e74a8f17.zip
Imported nx-X11-3.1.0-4.tar.gznx-X11/3.1.0-4
Summary: Imported nx-X11-3.1.0-4.tar.gz Keywords: Imported nx-X11-3.1.0-4.tar.gz into Git repository
Diffstat (limited to 'nx-X11/programs/Xserver/Xext/EVI.c')
-rw-r--r--nx-X11/programs/Xserver/Xext/EVI.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/nx-X11/programs/Xserver/Xext/EVI.c b/nx-X11/programs/Xserver/Xext/EVI.c
index b59180685..93ed19fa6 100644
--- a/nx-X11/programs/Xserver/Xext/EVI.c
+++ b/nx-X11/programs/Xserver/Xext/EVI.c
@@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <X11/extensions/XEVIstr.h>
#include "EVIstruct.h"
#include "modinit.h"
+#include "scrnintstr.h"
#if 0
static unsigned char XEVIReqCode = 0;
@@ -89,10 +90,22 @@ ProcEVIGetVisualInfo(ClientPtr client)
{
REQUEST(xEVIGetVisualInfoReq);
xEVIGetVisualInfoReply rep;
- int n, n_conflict, n_info, sz_info, sz_conflict;
+ int i, n, n_conflict, n_info, sz_info, sz_conflict;
VisualID32 *conflict;
+ unsigned int total_visuals = 0;
xExtendedVisualInfo *eviInfo;
int status;
+
+ /*
+ * do this first, otherwise REQUEST_FIXED_SIZE can overflow. we assume
+ * here that you don't have more than 2^32 visuals over all your screens;
+ * this seems like a safe assumption.
+ */
+ for (i = 0; i < screenInfo.numScreens; i++)
+ total_visuals += screenInfo.screens[i]->numVisuals;
+ if (stuff->n_visual > total_visuals)
+ return BadValue;
+
REQUEST_FIXED_SIZE(xEVIGetVisualInfoReq, stuff->n_visual * sz_VisualID32);
status = eviPriv->getVisualInfo((VisualID32 *)&stuff[1], (int)stuff->n_visual,
&eviInfo, &n_info, &conflict, &n_conflict);