diff options
author | Eric Anholt <[email protected]> | 2012-11-13 13:39:37 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2012-11-17 12:55:54 -0800 |
commit | 5c99697f74c68f7e170564d791b95d986a18774a (patch) | |
tree | df53cbb8f4e783d09d10e14ff73371390e9b815a /src/mesa/main/readpix.c | |
parent | df3361df01e35aae9f379f0687490ba409841cfb (diff) |
mesa: Fix segfault on reading from a missing color read buffer.
The diff looks funny, but it's moving the integer vs non-integer check
below the _mesa_source_buffer_exists() check that ensures
_ColorReadBuffer is non-null, so we get a GL_INVALID_OPERATION instead
of a segfault. This looks like it had regressed in the
_mesa_error_check_format_and_type() changes, which removed the first of
the two duplicated checks for the source buffer. Fixes segfault in the
new piglit ARB_framebuffer_object/negative-readpixels-no-rb.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45877
NOTE: This is a candidate for the stable branches.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa/main/readpix.c')
-rw-r--r-- | src/mesa/main/readpix.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c index f6680c91f44..d6d105bc4d6 100644 --- a/src/mesa/main/readpix.c +++ b/src/mesa/main/readpix.c @@ -743,6 +743,17 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height, return; } + if (_mesa_is_user_fbo(ctx->ReadBuffer) && + ctx->ReadBuffer->Visual.samples > 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(multisample FBO)"); + return; + } + + if (!_mesa_source_buffer_exists(ctx, format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(no readbuffer)"); + return; + } + /* Check that the destination format and source buffer are both * integer-valued or both non-integer-valued. */ @@ -757,17 +768,6 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height, } } - if (_mesa_is_user_fbo(ctx->ReadBuffer) && - ctx->ReadBuffer->Visual.samples > 0) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(multisample FBO)"); - return; - } - - if (!_mesa_source_buffer_exists(ctx, format)) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(no readbuffer)"); - return; - } - if (width == 0 || height == 0) return; /* nothing to do */ |