From ea08a5bcf6a670d2d6c67328414826a308d86e0d Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 24 Mar 2016 13:57:58 -0400 Subject: [PATCH] glapi: Harden GLX request size processing (v2) v2: Use == not is for equality testing (Dylan Baker) Reviewed-by: Eric Anholt Signed-off-by: Adam Jackson --- src/mapi/glapi/gen/glX_XML.py | 2 +- src/mapi/glapi/gen/glX_proto_recv.py | 2 -- src/mapi/glapi/gen/glX_proto_send.py | 2 -- src/mapi/glapi/gen/glX_proto_size.py | 24 +++++++++++------------- src/mapi/glapi/gen/gl_XML.py | 2 +- 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 @@ -176,8 +176,6 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto): print '#include ' print '#include ' - print '' - print '#define __GLX_PAD(n) (((n) + 3) & ~3)' print '' self.printFastcall() self.printNoinline() 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, " * ") -- 2.30.2