1 From d303d79450436a1ef04252c2a7e36870c2506f38 Mon Sep 17 00:00:00 2001
2 From: Adam Jackson <ajax@redhat.com>
3 Date: Mon, 10 Nov 2014 12:13:48 -0500
4 Subject: [PATCH 32/33] glx: Pass remaining request length into ->varsize (v2)
7 v2: Handle more multiplies in indirect_reqsize.c (Julien Cristau)
9 Reviewed-by: Julien Cristau <jcristau@debian.org>
10 Reviewed-by: Michal Srb <msrb@suse.com>
11 Reviewed-by: Andy Ritger <aritger@nvidia.com>
12 Signed-off-by: Adam Jackson <ajax@redhat.com>
13 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
16 glx/glxserver.h | 2 +-
17 glx/indirect_reqsize.c | 142 +++++++++++++++++++------------------
18 glx/indirect_reqsize.h | 181 +++++++++++++++++++++++++++++-------------------
19 glx/rensize.c | 27 +++++---
20 5 files changed, 205 insertions(+), 154 deletions(-)
22 Index: xorg-server-1.15.1/glx/glxcmds.c
23 ===================================================================
24 --- xorg-server-1.15.1.orig/glx/glxcmds.c 2014-12-04 11:57:06.345650678 -0500
25 +++ xorg-server-1.15.1/glx/glxcmds.c 2014-12-04 11:57:06.337650627 -0500
28 /* variable size command */
29 extra = (*entry.varsize) (pc + __GLX_RENDER_HDR_SIZE,
32 + left - __GLX_RENDER_HDR_SIZE);
37 if (cl->largeCmdRequestsSoFar == 0) {
38 __GLXrenderSizeData entry;
40 + int left = (req->length << 2) - sz_xGLXRenderLargeReq;
45 ** will be in the 1st request, so it's okay to do this.
47 extra = (*entry.varsize) (pc + __GLX_RENDER_LARGE_HDR_SIZE,
50 + left - __GLX_RENDER_LARGE_HDR_SIZE);
54 Index: xorg-server-1.15.1/glx/glxserver.h
55 ===================================================================
56 --- xorg-server-1.15.1.orig/glx/glxserver.h 2014-12-04 11:57:06.345650678 -0500
57 +++ xorg-server-1.15.1/glx/glxserver.h 2014-12-04 11:57:06.337650627 -0500
60 * Tables for computing the size of each rendering command.
62 -typedef int (*gl_proto_size_func) (const GLbyte *, Bool);
63 +typedef int (*gl_proto_size_func) (const GLbyte *, Bool, int);
67 Index: xorg-server-1.15.1/glx/indirect_reqsize.c
68 ===================================================================
69 --- xorg-server-1.15.1.orig/glx/indirect_reqsize.c 2014-12-04 11:57:06.345650678 -0500
70 +++ xorg-server-1.15.1/glx/indirect_reqsize.c 2014-12-04 11:57:06.337650627 -0500
72 #include "indirect_size.h"
73 #include "indirect_reqsize.h"
75 -#define __GLX_PAD(x) (((x) + 3) & ~3)
77 #if defined(__CYGWIN__) || defined(__MINGW32__)
81 #define ALIAS2(from,to) \
82 - GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \
83 + GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap, int reqlen ) \
84 __attribute__ ((alias( # to )));
85 #define ALIAS(from,to) ALIAS2( from, __glX ## to ## ReqSize )
87 #define ALIAS(from,to) \
88 - GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \
89 - { return __glX ## to ## ReqSize( pc, swap ); }
90 + GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap, int reqlen ) \
91 + { return __glX ## to ## ReqSize( pc, swap, reqlen ); }
95 -__glXCallListsReqSize(const GLbyte * pc, Bool swap)
96 +__glXCallListsReqSize(const GLbyte * pc, Bool swap, int reqlen)
98 GLsizei n = *(GLsizei *) (pc + 0);
99 GLenum type = *(GLenum *) (pc + 4);
103 compsize = __glCallLists_size(type);
104 - return __GLX_PAD((compsize * n));
105 + return safe_pad(safe_mul(compsize, n));
109 -__glXBitmapReqSize(const GLbyte * pc, Bool swap)
110 +__glXBitmapReqSize(const GLbyte * pc, Bool swap, int reqlen)
112 GLint row_length = *(GLint *) (pc + 4);
113 GLint image_height = 0;
118 -__glXFogfvReqSize(const GLbyte * pc, Bool swap)
119 +__glXFogfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
121 GLenum pname = *(GLenum *) (pc + 0);
126 compsize = __glFogfv_size(pname);
127 - return __GLX_PAD((compsize * 4));
128 + return safe_pad(safe_mul(compsize, 4));
132 -__glXLightfvReqSize(const GLbyte * pc, Bool swap)
133 +__glXLightfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
135 GLenum pname = *(GLenum *) (pc + 4);
137 @@ -112,11 +110,11 @@
140 compsize = __glLightfv_size(pname);
141 - return __GLX_PAD((compsize * 4));
142 + return safe_pad(safe_mul(compsize, 4));
146 -__glXLightModelfvReqSize(const GLbyte * pc, Bool swap)
147 +__glXLightModelfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
149 GLenum pname = *(GLenum *) (pc + 0);
151 @@ -126,11 +124,11 @@
154 compsize = __glLightModelfv_size(pname);
155 - return __GLX_PAD((compsize * 4));
156 + return safe_pad(safe_mul(compsize, 4));
160 -__glXMaterialfvReqSize(const GLbyte * pc, Bool swap)
161 +__glXMaterialfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
163 GLenum pname = *(GLenum *) (pc + 4);
165 @@ -140,11 +138,11 @@
168 compsize = __glMaterialfv_size(pname);
169 - return __GLX_PAD((compsize * 4));
170 + return safe_pad(safe_mul(compsize, 4));
174 -__glXPolygonStippleReqSize(const GLbyte * pc, Bool swap)
175 +__glXPolygonStippleReqSize(const GLbyte * pc, Bool swap, int reqlen)
177 GLint row_length = *(GLint *) (pc + 4);
178 GLint image_height = 0;
183 -__glXTexParameterfvReqSize(const GLbyte * pc, Bool swap)
184 +__glXTexParameterfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
186 GLenum pname = *(GLenum *) (pc + 4);
188 @@ -174,11 +172,11 @@
191 compsize = __glTexParameterfv_size(pname);
192 - return __GLX_PAD((compsize * 4));
193 + return safe_pad(safe_mul(compsize, 4));
197 -__glXTexImage1DReqSize(const GLbyte * pc, Bool swap)
198 +__glXTexImage1DReqSize(const GLbyte * pc, Bool swap, int reqlen)
200 GLint row_length = *(GLint *) (pc + 4);
201 GLint image_height = 0;
206 -__glXTexImage2DReqSize(const GLbyte * pc, Bool swap)
207 +__glXTexImage2DReqSize(const GLbyte * pc, Bool swap, int reqlen)
209 GLint row_length = *(GLint *) (pc + 4);
210 GLint image_height = 0;
215 -__glXTexEnvfvReqSize(const GLbyte * pc, Bool swap)
216 +__glXTexEnvfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
218 GLenum pname = *(GLenum *) (pc + 4);
220 @@ -246,11 +244,11 @@
223 compsize = __glTexEnvfv_size(pname);
224 - return __GLX_PAD((compsize * 4));
225 + return safe_pad(safe_mul(compsize, 4));
229 -__glXTexGendvReqSize(const GLbyte * pc, Bool swap)
230 +__glXTexGendvReqSize(const GLbyte * pc, Bool swap, int reqlen)
232 GLenum pname = *(GLenum *) (pc + 4);
234 @@ -260,11 +258,11 @@
237 compsize = __glTexGendv_size(pname);
238 - return __GLX_PAD((compsize * 8));
239 + return safe_pad(safe_mul(compsize, 8));
243 -__glXTexGenfvReqSize(const GLbyte * pc, Bool swap)
244 +__glXTexGenfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
246 GLenum pname = *(GLenum *) (pc + 4);
248 @@ -274,11 +272,11 @@
251 compsize = __glTexGenfv_size(pname);
252 - return __GLX_PAD((compsize * 4));
253 + return safe_pad(safe_mul(compsize, 4));
257 -__glXPixelMapfvReqSize(const GLbyte * pc, Bool swap)
258 +__glXPixelMapfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
260 GLsizei mapsize = *(GLsizei *) (pc + 4);
262 @@ -286,11 +284,11 @@
263 mapsize = bswap_32(mapsize);
266 - return __GLX_PAD((mapsize * 4));
267 + return safe_pad(safe_mul(mapsize, 4));
271 -__glXPixelMapusvReqSize(const GLbyte * pc, Bool swap)
272 +__glXPixelMapusvReqSize(const GLbyte * pc, Bool swap, int reqlen)
274 GLsizei mapsize = *(GLsizei *) (pc + 4);
276 @@ -298,11 +296,11 @@
277 mapsize = bswap_32(mapsize);
280 - return __GLX_PAD((mapsize * 2));
281 + return safe_pad(safe_mul(mapsize, 2));
285 -__glXDrawPixelsReqSize(const GLbyte * pc, Bool swap)
286 +__glXDrawPixelsReqSize(const GLbyte * pc, Bool swap, int reqlen)
288 GLint row_length = *(GLint *) (pc + 4);
289 GLint image_height = 0;
294 -__glXPrioritizeTexturesReqSize(const GLbyte * pc, Bool swap)
295 +__glXPrioritizeTexturesReqSize(const GLbyte * pc, Bool swap, int reqlen)
297 GLsizei n = *(GLsizei *) (pc + 0);
299 @@ -338,11 +336,11 @@
303 - return __GLX_PAD((n * 4) + (n * 4));
304 + return safe_pad(safe_add(safe_mul(n, 4), safe_mul(n, 4)));
308 -__glXTexSubImage1DReqSize(const GLbyte * pc, Bool swap)
309 +__glXTexSubImage1DReqSize(const GLbyte * pc, Bool swap, int reqlen)
311 GLint row_length = *(GLint *) (pc + 4);
312 GLint image_height = 0;
317 -__glXTexSubImage2DReqSize(const GLbyte * pc, Bool swap)
318 +__glXTexSubImage2DReqSize(const GLbyte * pc, Bool swap, int reqlen)
320 GLint row_length = *(GLint *) (pc + 4);
321 GLint image_height = 0;
326 -__glXColorTableReqSize(const GLbyte * pc, Bool swap)
327 +__glXColorTableReqSize(const GLbyte * pc, Bool swap, int reqlen)
329 GLint row_length = *(GLint *) (pc + 4);
330 GLint image_height = 0;
335 -__glXColorTableParameterfvReqSize(const GLbyte * pc, Bool swap)
336 +__glXColorTableParameterfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
338 GLenum pname = *(GLenum *) (pc + 4);
340 @@ -438,11 +436,11 @@
343 compsize = __glColorTableParameterfv_size(pname);
344 - return __GLX_PAD((compsize * 4));
345 + return safe_pad(safe_mul(compsize, 4));
349 -__glXColorSubTableReqSize(const GLbyte * pc, Bool swap)
350 +__glXColorSubTableReqSize(const GLbyte * pc, Bool swap, int reqlen)
352 GLint row_length = *(GLint *) (pc + 4);
353 GLint image_height = 0;
358 -__glXConvolutionFilter1DReqSize(const GLbyte * pc, Bool swap)
359 +__glXConvolutionFilter1DReqSize(const GLbyte * pc, Bool swap, int reqlen)
361 GLint row_length = *(GLint *) (pc + 4);
362 GLint image_height = 0;
367 -__glXConvolutionFilter2DReqSize(const GLbyte * pc, Bool swap)
368 +__glXConvolutionFilter2DReqSize(const GLbyte * pc, Bool swap, int reqlen)
370 GLint row_length = *(GLint *) (pc + 4);
371 GLint image_height = 0;
376 -__glXConvolutionParameterfvReqSize(const GLbyte * pc, Bool swap)
377 +__glXConvolutionParameterfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
379 GLenum pname = *(GLenum *) (pc + 4);
381 @@ -538,11 +536,11 @@
384 compsize = __glConvolutionParameterfv_size(pname);
385 - return __GLX_PAD((compsize * 4));
386 + return safe_pad(safe_mul(compsize, 4));
390 -__glXTexImage3DReqSize(const GLbyte * pc, Bool swap)
391 +__glXTexImage3DReqSize(const GLbyte * pc, Bool swap, int reqlen)
393 GLint row_length = *(GLint *) (pc + 4);
394 GLint image_height = *(GLint *) (pc + 8);
399 -__glXTexSubImage3DReqSize(const GLbyte * pc, Bool swap)
400 +__glXTexSubImage3DReqSize(const GLbyte * pc, Bool swap, int reqlen)
402 GLint row_length = *(GLint *) (pc + 4);
403 GLint image_height = *(GLint *) (pc + 8);
408 -__glXCompressedTexImage1DReqSize(const GLbyte * pc, Bool swap)
409 +__glXCompressedTexImage1DReqSize(const GLbyte * pc, Bool swap, int reqlen)
411 GLsizei imageSize = *(GLsizei *) (pc + 20);
413 @@ -621,11 +619,11 @@
414 imageSize = bswap_32(imageSize);
417 - return __GLX_PAD(imageSize);
418 + return safe_pad(imageSize);
422 -__glXCompressedTexImage2DReqSize(const GLbyte * pc, Bool swap)
423 +__glXCompressedTexImage2DReqSize(const GLbyte * pc, Bool swap, int reqlen)
425 GLsizei imageSize = *(GLsizei *) (pc + 24);
427 @@ -633,11 +631,11 @@
428 imageSize = bswap_32(imageSize);
431 - return __GLX_PAD(imageSize);
432 + return safe_pad(imageSize);
436 -__glXCompressedTexImage3DReqSize(const GLbyte * pc, Bool swap)
437 +__glXCompressedTexImage3DReqSize(const GLbyte * pc, Bool swap, int reqlen)
439 GLsizei imageSize = *(GLsizei *) (pc + 28);
441 @@ -645,11 +643,11 @@
442 imageSize = bswap_32(imageSize);
445 - return __GLX_PAD(imageSize);
446 + return safe_pad(imageSize);
450 -__glXCompressedTexSubImage3DReqSize(const GLbyte * pc, Bool swap)
451 +__glXCompressedTexSubImage3DReqSize(const GLbyte * pc, Bool swap, int reqlen)
453 GLsizei imageSize = *(GLsizei *) (pc + 36);
455 @@ -657,11 +655,11 @@
456 imageSize = bswap_32(imageSize);
459 - return __GLX_PAD(imageSize);
460 + return safe_pad(imageSize);
464 -__glXPointParameterfvReqSize(const GLbyte * pc, Bool swap)
465 +__glXPointParameterfvReqSize(const GLbyte * pc, Bool swap, int reqlen)
467 GLenum pname = *(GLenum *) (pc + 0);
469 @@ -671,11 +669,11 @@
472 compsize = __glPointParameterfv_size(pname);
473 - return __GLX_PAD((compsize * 4));
474 + return safe_pad(safe_mul(compsize, 4));
478 -__glXDrawBuffersReqSize(const GLbyte * pc, Bool swap)
479 +__glXDrawBuffersReqSize(const GLbyte * pc, Bool swap, int reqlen)
481 GLsizei n = *(GLsizei *) (pc + 0);
483 @@ -683,11 +681,11 @@
487 - return __GLX_PAD((n * 4));
488 + return safe_pad(safe_mul(n, 4));
492 -__glXProgramStringARBReqSize(const GLbyte * pc, Bool swap)
493 +__glXProgramStringARBReqSize(const GLbyte * pc, Bool swap, int reqlen)
495 GLsizei len = *(GLsizei *) (pc + 8);
497 @@ -695,11 +693,11 @@
501 - return __GLX_PAD(len);
502 + return safe_pad(len);
506 -__glXVertexAttribs1dvNVReqSize(const GLbyte * pc, Bool swap)
507 +__glXVertexAttribs1dvNVReqSize(const GLbyte * pc, Bool swap, int reqlen)
509 GLsizei n = *(GLsizei *) (pc + 4);
511 @@ -707,11 +705,11 @@
515 - return __GLX_PAD((n * 8));
516 + return safe_pad(safe_mul(n, 8));
520 -__glXVertexAttribs2dvNVReqSize(const GLbyte * pc, Bool swap)
521 +__glXVertexAttribs2dvNVReqSize(const GLbyte * pc, Bool swap, int reqlen)
523 GLsizei n = *(GLsizei *) (pc + 4);
525 @@ -719,11 +717,11 @@
529 - return __GLX_PAD((n * 16));
530 + return safe_pad(safe_mul(n, 16));
534 -__glXVertexAttribs3dvNVReqSize(const GLbyte * pc, Bool swap)
535 +__glXVertexAttribs3dvNVReqSize(const GLbyte * pc, Bool swap, int reqlen)
537 GLsizei n = *(GLsizei *) (pc + 4);
539 @@ -731,11 +729,11 @@
543 - return __GLX_PAD((n * 24));
544 + return safe_pad(safe_mul(n, 24));
548 -__glXVertexAttribs3fvNVReqSize(const GLbyte * pc, Bool swap)
549 +__glXVertexAttribs3fvNVReqSize(const GLbyte * pc, Bool swap, int reqlen)
551 GLsizei n = *(GLsizei *) (pc + 4);
553 @@ -743,11 +741,11 @@
557 - return __GLX_PAD((n * 12));
558 + return safe_pad(safe_mul(n, 12));
562 -__glXVertexAttribs3svNVReqSize(const GLbyte * pc, Bool swap)
563 +__glXVertexAttribs3svNVReqSize(const GLbyte * pc, Bool swap, int reqlen)
565 GLsizei n = *(GLsizei *) (pc + 4);
567 @@ -755,11 +753,11 @@
571 - return __GLX_PAD((n * 6));
572 + return safe_pad(safe_mul(n, 6));
576 -__glXVertexAttribs4dvNVReqSize(const GLbyte * pc, Bool swap)
577 +__glXVertexAttribs4dvNVReqSize(const GLbyte * pc, Bool swap, int reqlen)
579 GLsizei n = *(GLsizei *) (pc + 4);
585 - return __GLX_PAD((n * 32));
586 + return safe_pad(safe_mul(n, 32));
590 Index: xorg-server-1.15.1/glx/indirect_reqsize.h
591 ===================================================================
592 --- xorg-server-1.15.1.orig/glx/indirect_reqsize.h 2014-12-04 11:57:06.345650678 -0500
593 +++ xorg-server-1.15.1/glx/indirect_reqsize.h 2014-12-04 11:57:06.337650627 -0500
594 @@ -36,115 +36,156 @@
598 -extern PURE _X_HIDDEN int __glXCallListsReqSize(const GLbyte * pc, Bool swap);
599 -extern PURE _X_HIDDEN int __glXBitmapReqSize(const GLbyte * pc, Bool swap);
600 -extern PURE _X_HIDDEN int __glXFogfvReqSize(const GLbyte * pc, Bool swap);
601 -extern PURE _X_HIDDEN int __glXFogivReqSize(const GLbyte * pc, Bool swap);
602 -extern PURE _X_HIDDEN int __glXLightfvReqSize(const GLbyte * pc, Bool swap);
603 -extern PURE _X_HIDDEN int __glXLightivReqSize(const GLbyte * pc, Bool swap);
604 -extern PURE _X_HIDDEN int __glXLightModelfvReqSize(const GLbyte * pc,
606 -extern PURE _X_HIDDEN int __glXLightModelivReqSize(const GLbyte * pc,
608 -extern PURE _X_HIDDEN int __glXMaterialfvReqSize(const GLbyte * pc, Bool swap);
609 -extern PURE _X_HIDDEN int __glXMaterialivReqSize(const GLbyte * pc, Bool swap);
610 +extern PURE _X_HIDDEN int __glXCallListsReqSize(const GLbyte * pc, Bool swap,
612 +extern PURE _X_HIDDEN int __glXBitmapReqSize(const GLbyte * pc, Bool swap,
614 +extern PURE _X_HIDDEN int __glXFogfvReqSize(const GLbyte * pc, Bool swap,
616 +extern PURE _X_HIDDEN int __glXFogivReqSize(const GLbyte * pc, Bool swap,
618 +extern PURE _X_HIDDEN int __glXLightfvReqSize(const GLbyte * pc, Bool swap,
620 +extern PURE _X_HIDDEN int __glXLightivReqSize(const GLbyte * pc, Bool swap,
622 +extern PURE _X_HIDDEN int __glXLightModelfvReqSize(const GLbyte * pc, Bool swap,
624 +extern PURE _X_HIDDEN int __glXLightModelivReqSize(const GLbyte * pc, Bool swap,
626 +extern PURE _X_HIDDEN int __glXMaterialfvReqSize(const GLbyte * pc, Bool swap,
628 +extern PURE _X_HIDDEN int __glXMaterialivReqSize(const GLbyte * pc, Bool swap,
630 extern PURE _X_HIDDEN int __glXPolygonStippleReqSize(const GLbyte * pc,
632 + Bool swap, int reqlen);
633 extern PURE _X_HIDDEN int __glXTexParameterfvReqSize(const GLbyte * pc,
635 + Bool swap, int reqlen);
636 extern PURE _X_HIDDEN int __glXTexParameterivReqSize(const GLbyte * pc,
638 -extern PURE _X_HIDDEN int __glXTexImage1DReqSize(const GLbyte * pc, Bool swap);
639 -extern PURE _X_HIDDEN int __glXTexImage2DReqSize(const GLbyte * pc, Bool swap);
640 -extern PURE _X_HIDDEN int __glXTexEnvfvReqSize(const GLbyte * pc, Bool swap);
641 -extern PURE _X_HIDDEN int __glXTexEnvivReqSize(const GLbyte * pc, Bool swap);
642 -extern PURE _X_HIDDEN int __glXTexGendvReqSize(const GLbyte * pc, Bool swap);
643 -extern PURE _X_HIDDEN int __glXTexGenfvReqSize(const GLbyte * pc, Bool swap);
644 -extern PURE _X_HIDDEN int __glXTexGenivReqSize(const GLbyte * pc, Bool swap);
645 -extern PURE _X_HIDDEN int __glXMap1dReqSize(const GLbyte * pc, Bool swap);
646 -extern PURE _X_HIDDEN int __glXMap1fReqSize(const GLbyte * pc, Bool swap);
647 -extern PURE _X_HIDDEN int __glXMap2dReqSize(const GLbyte * pc, Bool swap);
648 -extern PURE _X_HIDDEN int __glXMap2fReqSize(const GLbyte * pc, Bool swap);
649 -extern PURE _X_HIDDEN int __glXPixelMapfvReqSize(const GLbyte * pc, Bool swap);
650 -extern PURE _X_HIDDEN int __glXPixelMapuivReqSize(const GLbyte * pc, Bool swap);
651 -extern PURE _X_HIDDEN int __glXPixelMapusvReqSize(const GLbyte * pc, Bool swap);
652 -extern PURE _X_HIDDEN int __glXDrawPixelsReqSize(const GLbyte * pc, Bool swap);
653 -extern PURE _X_HIDDEN int __glXDrawArraysReqSize(const GLbyte * pc, Bool swap);
654 + Bool swap, int reqlen);
655 +extern PURE _X_HIDDEN int __glXTexImage1DReqSize(const GLbyte * pc, Bool swap,
657 +extern PURE _X_HIDDEN int __glXTexImage2DReqSize(const GLbyte * pc, Bool swap,
659 +extern PURE _X_HIDDEN int __glXTexEnvfvReqSize(const GLbyte * pc, Bool swap,
661 +extern PURE _X_HIDDEN int __glXTexEnvivReqSize(const GLbyte * pc, Bool swap,
663 +extern PURE _X_HIDDEN int __glXTexGendvReqSize(const GLbyte * pc, Bool swap,
665 +extern PURE _X_HIDDEN int __glXTexGenfvReqSize(const GLbyte * pc, Bool swap,
667 +extern PURE _X_HIDDEN int __glXTexGenivReqSize(const GLbyte * pc, Bool swap,
669 +extern PURE _X_HIDDEN int __glXMap1dReqSize(const GLbyte * pc, Bool swap,
671 +extern PURE _X_HIDDEN int __glXMap1fReqSize(const GLbyte * pc, Bool swap,
673 +extern PURE _X_HIDDEN int __glXMap2dReqSize(const GLbyte * pc, Bool swap,
675 +extern PURE _X_HIDDEN int __glXMap2fReqSize(const GLbyte * pc, Bool swap,
677 +extern PURE _X_HIDDEN int __glXPixelMapfvReqSize(const GLbyte * pc, Bool swap,
679 +extern PURE _X_HIDDEN int __glXPixelMapuivReqSize(const GLbyte * pc, Bool swap,
681 +extern PURE _X_HIDDEN int __glXPixelMapusvReqSize(const GLbyte * pc, Bool swap,
683 +extern PURE _X_HIDDEN int __glXDrawPixelsReqSize(const GLbyte * pc, Bool swap,
685 +extern PURE _X_HIDDEN int __glXDrawArraysReqSize(const GLbyte * pc, Bool swap,
687 extern PURE _X_HIDDEN int __glXPrioritizeTexturesReqSize(const GLbyte * pc,
689 + Bool swap, int reqlen);
690 extern PURE _X_HIDDEN int __glXTexSubImage1DReqSize(const GLbyte * pc,
692 + Bool swap, int reqlen);
693 extern PURE _X_HIDDEN int __glXTexSubImage2DReqSize(const GLbyte * pc,
695 -extern PURE _X_HIDDEN int __glXColorTableReqSize(const GLbyte * pc, Bool swap);
696 + Bool swap, int reqlen);
697 +extern PURE _X_HIDDEN int __glXColorTableReqSize(const GLbyte * pc, Bool swap,
699 extern PURE _X_HIDDEN int __glXColorTableParameterfvReqSize(const GLbyte * pc,
703 extern PURE _X_HIDDEN int __glXColorTableParameterivReqSize(const GLbyte * pc,
707 extern PURE _X_HIDDEN int __glXColorSubTableReqSize(const GLbyte * pc,
709 + Bool swap, int reqlen);
710 extern PURE _X_HIDDEN int __glXConvolutionFilter1DReqSize(const GLbyte * pc,
714 extern PURE _X_HIDDEN int __glXConvolutionFilter2DReqSize(const GLbyte * pc,
718 extern PURE _X_HIDDEN int __glXConvolutionParameterfvReqSize(const GLbyte * pc,
722 extern PURE _X_HIDDEN int __glXConvolutionParameterivReqSize(const GLbyte * pc,
726 extern PURE _X_HIDDEN int __glXSeparableFilter2DReqSize(const GLbyte * pc,
728 -extern PURE _X_HIDDEN int __glXTexImage3DReqSize(const GLbyte * pc, Bool swap);
729 + Bool swap, int reqlen);
730 +extern PURE _X_HIDDEN int __glXTexImage3DReqSize(const GLbyte * pc, Bool swap,
732 extern PURE _X_HIDDEN int __glXTexSubImage3DReqSize(const GLbyte * pc,
734 + Bool swap, int reqlen);
735 extern PURE _X_HIDDEN int __glXCompressedTexImage1DReqSize(const GLbyte * pc,
739 extern PURE _X_HIDDEN int __glXCompressedTexImage2DReqSize(const GLbyte * pc,
743 extern PURE _X_HIDDEN int __glXCompressedTexImage3DReqSize(const GLbyte * pc,
747 extern PURE _X_HIDDEN int __glXCompressedTexSubImage1DReqSize(const GLbyte * pc,
751 extern PURE _X_HIDDEN int __glXCompressedTexSubImage2DReqSize(const GLbyte * pc,
755 extern PURE _X_HIDDEN int __glXCompressedTexSubImage3DReqSize(const GLbyte * pc,
759 extern PURE _X_HIDDEN int __glXPointParameterfvReqSize(const GLbyte * pc,
761 + Bool swap, int reqlen);
762 extern PURE _X_HIDDEN int __glXPointParameterivReqSize(const GLbyte * pc,
764 -extern PURE _X_HIDDEN int __glXDrawBuffersReqSize(const GLbyte * pc, Bool swap);
765 + Bool swap, int reqlen);
766 +extern PURE _X_HIDDEN int __glXDrawBuffersReqSize(const GLbyte * pc, Bool swap,
768 extern PURE _X_HIDDEN int __glXProgramStringARBReqSize(const GLbyte * pc,
770 + Bool swap, int reqlen);
771 extern PURE _X_HIDDEN int __glXDeleteFramebuffersReqSize(const GLbyte * pc,
773 + Bool swap, int reqlen);
774 extern PURE _X_HIDDEN int __glXDeleteRenderbuffersReqSize(const GLbyte * pc,
778 extern PURE _X_HIDDEN int __glXVertexAttribs1dvNVReqSize(const GLbyte * pc,
780 + Bool swap, int reqlen);
781 extern PURE _X_HIDDEN int __glXVertexAttribs1fvNVReqSize(const GLbyte * pc,
783 + Bool swap, int reqlen);
784 extern PURE _X_HIDDEN int __glXVertexAttribs1svNVReqSize(const GLbyte * pc,
786 + Bool swap, int reqlen);
787 extern PURE _X_HIDDEN int __glXVertexAttribs2dvNVReqSize(const GLbyte * pc,
789 + Bool swap, int reqlen);
790 extern PURE _X_HIDDEN int __glXVertexAttribs2fvNVReqSize(const GLbyte * pc,
792 + Bool swap, int reqlen);
793 extern PURE _X_HIDDEN int __glXVertexAttribs2svNVReqSize(const GLbyte * pc,
795 + Bool swap, int reqlen);
796 extern PURE _X_HIDDEN int __glXVertexAttribs3dvNVReqSize(const GLbyte * pc,
798 + Bool swap, int reqlen);
799 extern PURE _X_HIDDEN int __glXVertexAttribs3fvNVReqSize(const GLbyte * pc,
801 + Bool swap, int reqlen);
802 extern PURE _X_HIDDEN int __glXVertexAttribs3svNVReqSize(const GLbyte * pc,
804 + Bool swap, int reqlen);
805 extern PURE _X_HIDDEN int __glXVertexAttribs4dvNVReqSize(const GLbyte * pc,
807 + Bool swap, int reqlen);
808 extern PURE _X_HIDDEN int __glXVertexAttribs4fvNVReqSize(const GLbyte * pc,
810 + Bool swap, int reqlen);
811 extern PURE _X_HIDDEN int __glXVertexAttribs4svNVReqSize(const GLbyte * pc,
813 + Bool swap, int reqlen);
814 extern PURE _X_HIDDEN int __glXVertexAttribs4ubvNVReqSize(const GLbyte * pc,
821 Index: xorg-server-1.15.1/glx/rensize.c
822 ===================================================================
823 --- xorg-server-1.15.1.orig/glx/rensize.c 2014-12-04 11:57:06.345650678 -0500
824 +++ xorg-server-1.15.1/glx/rensize.c 2014-12-04 11:57:06.341650652 -0500
826 ((a & 0xff00U)<<8) | ((a & 0xffU)<<24))
829 -__glXMap1dReqSize(const GLbyte * pc, Bool swap)
830 +__glXMap1dReqSize(const GLbyte * pc, Bool swap, int reqlen)
838 -__glXMap1fReqSize(const GLbyte * pc, Bool swap)
839 +__glXMap1fReqSize(const GLbyte * pc, Bool swap, int reqlen)
847 -__glXMap2dReqSize(const GLbyte * pc, Bool swap)
848 +__glXMap2dReqSize(const GLbyte * pc, Bool swap, int reqlen)
851 GLint uorder, vorder;
856 -__glXMap2fReqSize(const GLbyte * pc, Bool swap)
857 +__glXMap2fReqSize(const GLbyte * pc, Bool swap, int reqlen)
860 GLint uorder, vorder;
861 @@ -359,13 +359,14 @@
865 -__glXDrawArraysReqSize(const GLbyte * pc, Bool swap)
866 +__glXDrawArraysReqSize(const GLbyte * pc, Bool swap, int reqlen)
868 __GLXdispatchDrawArraysHeader *hdr = (__GLXdispatchDrawArraysHeader *) pc;
869 __GLXdispatchDrawArraysComponentHeader *compHeader;
870 GLint numVertexes = hdr->numVertexes;
871 GLint numComponents = hdr->numComponents;
872 GLint arrayElementSize = 0;
880 pc += sizeof(__GLXdispatchDrawArraysHeader);
881 + reqlen -= sizeof(__GLXdispatchDrawArraysHeader);
883 + size = safe_mul(sizeof(__GLXdispatchDrawArraysComponentHeader),
885 + if (size < 0 || reqlen < 0 || reqlen < size)
888 compHeader = (__GLXdispatchDrawArraysComponentHeader *) pc;
890 for (i = 0; i < numComponents; i++) {
891 @@ -417,17 +425,18 @@
895 - arrayElementSize += __GLX_PAD(numVals * __glXTypeSize(datatype));
896 + x = safe_pad(safe_mul(numVals, __glXTypeSize(datatype)));
897 + if ((arrayElementSize = safe_add(arrayElementSize, x)) < 0)
900 pc += sizeof(__GLXdispatchDrawArraysComponentHeader);
903 - return ((numComponents * sizeof(__GLXdispatchDrawArraysComponentHeader)) +
904 - (numVertexes * arrayElementSize));
905 + return safe_add(size, safe_mul(numVertexes, arrayElementSize));
909 -__glXSeparableFilter2DReqSize(const GLbyte * pc, Bool swap)
910 +__glXSeparableFilter2DReqSize(const GLbyte * pc, Bool swap, int reqlen)
912 __GLXdispatchConvolutionFilterHeader *hdr =
913 (__GLXdispatchConvolutionFilterHeader *) pc;