summaryrefslogtreecommitdiffstats
path: root/src/mapi
diff options
context:
space:
mode:
authorAdam Jackson <[email protected]>2016-03-24 13:57:58 -0400
committerAdam Jackson <[email protected]>2016-05-17 15:04:56 -0400
commitea08a5bcf6a670d2d6c67328414826a308d86e0d (patch)
tree4992bc2188991f5de597a1820a7af7369e9a7297 /src/mapi
parent88cfc9ddaab5577260293fcbd4f7413fbd4aba21 (diff)
glapi: Harden GLX request size processing (v2)
v2: Use == not is for equality testing (Dylan Baker) Reviewed-by: Eric Anholt <[email protected]> Signed-off-by: Adam Jackson <[email protected]>
Diffstat (limited to 'src/mapi')
-rw-r--r--src/mapi/glapi/gen/glX_XML.py2
-rw-r--r--src/mapi/glapi/gen/glX_proto_recv.py2
-rw-r--r--src/mapi/glapi/gen/glX_proto_send.py2
-rw-r--r--src/mapi/glapi/gen/glX_proto_size.py24
-rw-r--r--src/mapi/glapi/gen/gl_XML.py2
5 files changed, 13 insertions, 19 deletions
diff --git a/src/mapi/glapi/gen/glX_XML.py b/src/mapi/glapi/gen/glX_XML.py
index 12ff291fc1b..c659e931b49 100644
--- a/src/mapi/glapi/gen/glX_XML.py
+++ b/src/mapi/glapi/gen/glX_XML.py
@@ -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
diff --git a/src/mapi/glapi/gen/glX_proto_recv.py b/src/mapi/glapi/gen/glX_proto_recv.py
index afee3882254..09cf05d4889 100644
--- a/src/mapi/glapi/gen/glX_proto_recv.py
+++ b/src/mapi/glapi/gen/glX_proto_recv.py
@@ -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;'
diff --git a/src/mapi/glapi/gen/glX_proto_send.py b/src/mapi/glapi/gen/glX_proto_send.py
index 8b3d8d756b8..10abcfff779 100644
--- a/src/mapi/glapi/gen/glX_proto_send.py
+++ b/src/mapi/glapi/gen/glX_proto_send.py
@@ -177,8 +177,6 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
print '#include <limits.h>'
print ''
- print '#define __GLX_PAD(n) (((n) + 3) & ~3)'
- print ''
self.printFastcall()
self.printNoinline()
print ''
diff --git a/src/mapi/glapi/gen/glX_proto_size.py b/src/mapi/glapi/gen/glX_proto_size.py
index 75fc26f5db0..3a1c5540290 100644
--- a/src/mapi/glapi/gen/glX_proto_size.py
+++ b/src/mapi/glapi/gen/glX_proto_size.py
@@ -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 ''
diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py
index e11f6fc371e..4f35343f826 100644
--- a/src/mapi/glapi/gen/gl_XML.py
+++ b/src/mapi/glapi/gen/gl_XML.py
@@ -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, " * ")