diff options
author | Reinhard Tartler <siretart@tauware.de> | 2011-10-10 17:46:43 +0200 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2011-10-10 17:46:43 +0200 |
commit | 3d1c57d5ef429e51ab7a626540c30b81e74a8f17 (patch) | |
tree | 2589846dd73cb0a86156fc5f2575ea2373431a57 /nx-X11/programs/Xserver/Xext/EVI.c | |
parent | 844a4094f098684dd1da5bc11e73479fb61373a3 (diff) | |
download | nx-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.c | 15 |
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); |