glapi: Harden GLX request size processing (v2)
authorAdam Jackson <ajax@redhat.com>
Thu, 24 Mar 2016 17:57:58 +0000 (13:57 -0400)
committerAdam Jackson <ajax@redhat.com>
Tue, 17 May 2016 19:04:56 +0000 (15:04 -0400)
v2: Use == not is for equality testing (Dylan Baker)

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
src/mapi/glapi/gen/glX_XML.py
src/mapi/glapi/gen/glX_proto_recv.py
src/mapi/glapi/gen/glX_proto_send.py
src/mapi/glapi/gen/glX_proto_size.py
src/mapi/glapi/gen/gl_XML.py

index 12ff291fc1baff12b43902a51944c6f9fbc65c8b..c659e931b49c1e8d9c1f5855f24ffb10e24b7f7a 100644 (file)
@@ -357,7 +357,7 @@ class glx_function(gl_XML.gl_function):
                 # FIXME adds some extra diffs to the generated
                 # FIXME code.
 
-                size_string = size_string + " + __GLX_PAD(%s)" % (p.size_string(1))
+                size_string = size_string + " + safe_pad(%s)" % (p.size_string(1))
 
         return size_string
 
index afee388225488705d6295f6d9d3b26a4945f5073..09cf05d4889011bca1e1fd16635df3a60a15a4c0 100644 (file)
@@ -89,8 +89,6 @@ class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto):
         print '#include "indirect_util.h"'
         print '#include "singlesize.h"'
         print ''
-        print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
-        print ''
         print 'typedef struct {'
         print '    __GLX_PIXEL_3D_HDR;'
         print '} __GLXpixel3DHeader;'
index 8b3d8d756b8d4c0a55f03625cd16b999310e44a3..10abcfff7797a25fb0c8b8a624c71740af1e8681 100644 (file)
@@ -176,8 +176,6 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
         print '#include <xcb/glx.h>'
         print '#include <limits.h>'
 
-        print ''
-        print '#define __GLX_PAD(n) (((n) + 3) & ~3)'
         print ''
         self.printFastcall()
         self.printNoinline()
index 75fc26f5db0eb71036bbaaad1abe0f21cf251047..3a1c5540290e07c5066b356faa52049842123b8f 100644 (file)
@@ -291,7 +291,7 @@ class glx_server_enum_function(glx_enum_function):
         print ''
         print '    compsize = __gl%s_size(%s);' % (f.name, string.join(f.count_parameter_list, ","))
         p = f.variable_length_parameter()
-        print '    return __GLX_PAD(%s);' % (p.size_string())
+        print '    return safe_pad(%s);' % (p.size_string())
 
         print '}'
         print ''
@@ -428,7 +428,7 @@ class PrintGlxReqSize_h(PrintGlxReqSize_common):
     def printBody(self, api):
         for func in api.functionIterateGlx():
             if not func.ignore and func.has_variable_size_request():
-                print 'extern PURE _X_HIDDEN int __glX%sReqSize(const GLbyte *pc, Bool swap);' % (func.name)
+                print 'extern PURE _X_HIDDEN int __glX%sReqSize(const GLbyte *pc, Bool swap, int reqlen);' % (func.name)
 
 
 class PrintGlxReqSize_c(PrintGlxReqSize_common):
@@ -452,20 +452,18 @@ class PrintGlxReqSize_c(PrintGlxReqSize_common):
         print '#include "indirect_size.h"'
         print '#include "indirect_reqsize.h"'
         print ''
-        print '#define __GLX_PAD(x)  (((x) + 3) & ~3)'
-        print ''
         print '#if defined(__CYGWIN__) || defined(__MINGW32__)'
         print '#  undef HAVE_ALIAS'
         print '#endif'
         print '#ifdef HAVE_ALIAS'
         print '#  define ALIAS2(from,to) \\'
-        print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \\'
+        print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap, int reqlen ) \\'
         print '        __attribute__ ((alias( # to )));'
         print '#  define ALIAS(from,to) ALIAS2( from, __glX ## to ## ReqSize )'
         print '#else'
         print '#  define ALIAS(from,to) \\'
-        print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap ) \\'
-        print '    { return __glX ## to ## ReqSize( pc, swap ); }'
+        print '    GLint __glX ## from ## ReqSize( const GLbyte * pc, Bool swap, int reqlen ) \\'
+        print '    { return __glX ## to ## ReqSize( pc, swap, reqlen ); }'
         print '#endif'
         print ''
         print ''
@@ -547,7 +545,7 @@ class PrintGlxReqSize_c(PrintGlxReqSize_common):
 
     def common_func_print_just_header(self, f):
         print 'int'
-        print '__glX%sReqSize( const GLbyte * pc, Bool swap )' % (f.name)
+        print '__glX%sReqSize( const GLbyte * pc, Bool swap, int reqlen )' % (f.name)
         print '{'
 
 
@@ -602,7 +600,6 @@ class PrintGlxReqSize_c(PrintGlxReqSize_common):
         offset = 0
         fixup = []
         params = []
-        plus = ''
         size = ''
         param_offsets = {}
 
@@ -620,9 +617,10 @@ class PrintGlxReqSize_c(PrintGlxReqSize_common):
                 if s == 0: s = 1
 
                 sig += "(%u,%u)" % (f.offset_of(p.counter), s)
-                size += '%s%s' % (plus, p.size_string())
-                plus = ' + '
-
+               if size == '':
+                   size = p.size_string()
+               else:
+                   size = "safe_add(%s, %s)" % (size, p.size_string())
 
         # If the calculated signature matches a function that has
         # already be emitted, don't emit this function.  Instead, add
@@ -645,7 +643,7 @@ class PrintGlxReqSize_c(PrintGlxReqSize_common):
             self.common_emit_fixups(fixup)
             print ''
 
-            print '    return __GLX_PAD(%s);' % (size)
+            print '    return safe_pad(%s);' % (size)
             print '}'
             print ''
 
index e11f6fc371e832fc0ea241120d37baae4830f323..4f35343f82616b1ab8aefe818f26d23ed951f393 100644 (file)
@@ -576,7 +576,7 @@ class gl_parameter(object):
                 list.append( str(s) )
 
             if len(list) > 1 and use_parens :
-                return "(%s)" % (string.join(list, " * "))
+                return "safe_mul(%s)" % (string.join(list, ", "))
             else:
                 return string.join(list, " * ")