[Mesa-dev] [PATCH] swrast: Fix unsigned promotion in pointer arithmetic
When rowstride was negatie, unsigned promotion caused a segfault here: 299│if (rb-Format == MESA_FORMAT_S8) { 300│ const GLuint rowStride = rb-RowStride; 301│ for (i = 0; i count; i++) { 302│ if (x[i] = 0 y[i] = 0 x[i] w y[i] h) { 303├stencil[i] = *(map + y[i] * rowStride + x[i]); 304│ } 305│ } 306│} Fixes segfault in oglconform separatestencil-neu(NonPolygon.BothFacesBitmapCoreAPI), though test still fails. Note: This is a candidate for the stable branches. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43327 Signed-off-by: Chad Versace chad.vers...@linux.intel.com --- src/mesa/swrast/s_stencil.c |6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mesa/swrast/s_stencil.c b/src/mesa/swrast/s_stencil.c index dbcbd2b..fb95ef1 100644 --- a/src/mesa/swrast/s_stencil.c +++ b/src/mesa/swrast/s_stencil.c @@ -297,7 +297,7 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint i; if (rb-Format == MESA_FORMAT_S8) { - const GLuint rowStride = rb-RowStride; + const GLint rowStride = rb-RowStride; for (i = 0; i count; i++) { if (x[i] = 0 y[i] = 0 x[i] w y[i] h) { stencil[i] = *(map + y[i] * rowStride + x[i]); @@ -305,8 +305,8 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb, } } else { - const GLuint bpp = _mesa_get_format_bytes(rb-Format); - const GLuint rowStride = rb-RowStride * bpp; + const GLint bpp = _mesa_get_format_bytes(rb-Format); + const GLint rowStride = rb-RowStride * bpp; for (i = 0; i count; i++) { if (x[i] = 0 y[i] = 0 x[i] w y[i] h) { const GLubyte *src = map + y[i] * rowStride + x[i] * bpp; -- 1.7.7.5 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] swrast: Fix unsigned promotion in pointer arithmetic
On Mon, Jan 23, 2012 at 10:15 AM, Chad Versace chad.vers...@linux.intel.com wrote: When rowstride was negatie, unsigned promotion caused a segfault here: 299│ if (rb-Format == MESA_FORMAT_S8) { 300│ const GLuint rowStride = rb-RowStride; 301│ for (i = 0; i count; i++) { 302│ if (x[i] = 0 y[i] = 0 x[i] w y[i] h) { 303├ stencil[i] = *(map + y[i] * rowStride + x[i]); 304│ } 305│ } 306│ } Fixes segfault in oglconform separatestencil-neu(NonPolygon.BothFacesBitmapCoreAPI), though test still fails. Note: This is a candidate for the stable branches. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43327 Signed-off-by: Chad Versace chad.vers...@linux.intel.com --- src/mesa/swrast/s_stencil.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mesa/swrast/s_stencil.c b/src/mesa/swrast/s_stencil.c index dbcbd2b..fb95ef1 100644 --- a/src/mesa/swrast/s_stencil.c +++ b/src/mesa/swrast/s_stencil.c @@ -297,7 +297,7 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint i; if (rb-Format == MESA_FORMAT_S8) { - const GLuint rowStride = rb-RowStride; + const GLint rowStride = rb-RowStride; for (i = 0; i count; i++) { if (x[i] = 0 y[i] = 0 x[i] w y[i] h) { stencil[i] = *(map + y[i] * rowStride + x[i]); @@ -305,8 +305,8 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb, } } else { - const GLuint bpp = _mesa_get_format_bytes(rb-Format); - const GLuint rowStride = rb-RowStride * bpp; + const GLint bpp = _mesa_get_format_bytes(rb-Format); + const GLint rowStride = rb-RowStride * bpp; for (i = 0; i count; i++) { if (x[i] = 0 y[i] = 0 x[i] w y[i] h) { const GLubyte *src = map + y[i] * rowStride + x[i] * bpp; -- 1.7.7.5 Looks good. Reviewed-by: Brian Paul bri...@vmware.com ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev