[Mesa-dev] [PATCH 07/11] glapi: Add the safe_{add, mul, pad} functions from xserver

Ian Romanick idr at freedesktop.org
Mon Mar 28 17:53:52 UTC 2016


On 03/24/2016 11:10 AM, Adam Jackson wrote:
> We're about to update the generator scripts to use these, easier not to
> vary between client and server.
> 
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
>  src/mapi/glapi/gen/glX_proto_send.py | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/src/mapi/glapi/gen/glX_proto_send.py b/src/mapi/glapi/gen/glX_proto_send.py
> index 2b33030..8b3d8d7 100644
> --- a/src/mapi/glapi/gen/glX_proto_send.py
> +++ b/src/mapi/glapi/gen/glX_proto_send.py
> @@ -174,6 +174,7 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
>          print '#include <X11/Xlib-xcb.h>'
>          print '#include <xcb/xcb.h>'
>          print '#include <xcb/glx.h>'
> +        print '#include <limits.h>'
>  
>          print ''
>          print '#define __GLX_PAD(n) (((n) + 3) & ~3)'
> @@ -181,6 +182,29 @@ class PrintGlxProtoStubs(glX_proto_common.glx_print_proto):
>          self.printFastcall()
>          self.printNoinline()
>          print ''
> +
> +        print 'static _X_INLINE int safe_add(int a, int b)'
> +        print '{'
> +        print '    if (a < 0 || b < 0) return -1;'
> +        print '    if (INT_MAX - a < b) return -1;'
> +        print '    return a + b;'
> +        print '}'
> +        print 'static _X_INLINE int safe_mul(int a, int b)'
> +        print '{'
> +        print '    if (a < 0 || b < 0) return -1;'
> +        print '    if (a == 0 || b == 0) return 0;'

Is this check actually necessary?

> +        print '    if (a > INT_MAX / b) return -1;'
> +        print '    return a * b;'
> +        print '}'
> +        print 'static _X_INLINE int safe_pad(int a)'
> +        print '{'
> +        print '    int ret;'
> +        print '    if (a < 0) return -1;'
> +        print '    if ((ret = safe_add(a, 3)) < 0) return -1;'
> +        print '    return ret & (GLuint)~3;'
> +        print '}'
> +        print ''
> +
>          print '#ifndef __GNUC__'
>          print '#  define __builtin_expect(x, y) x'
>          print '#endif'
> 



More information about the mesa-dev mailing list