diff options
author | Eduardo Lima Mitev <[email protected]> | 2015-02-14 13:25:20 +0100 |
---|---|---|
committer | Iago Toral Quiroga <[email protected]> | 2015-02-24 08:58:54 +0100 |
commit | 0c47e5492b2055848f88e41a14b0083674c5b18e (patch) | |
tree | 7b37564da6903b153ca4a5614412acb850c1a28a | |
parent | fe74fee8fa721a42448470e063870d24f9453dab (diff) |
mesa: Add missing error checks to GetProgramInfoLog, GetShaderInfoLog and GetProgramiv
Fixes 3 dEQP tests:
* dEQP-GLES3.functional.negative_api.state.get_program_info_log
* dEQP-GLES3.functional.negative_api.state.get_shader_info_log
* dEQP-GLES3.functional.negative_api.state.get_programiv
Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r-- | src/mesa/main/shaderapi.c | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 52eab46551b..dd536cd07d2 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -523,7 +523,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, GLint *params) { struct gl_shader_program *shProg - = _mesa_lookup_shader_program(ctx, program); + = _mesa_lookup_shader_program_err(ctx, program, "glGetProgramiv(program)"); /* Is transform feedback available in this context? */ @@ -546,7 +546,6 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, || _mesa_is_gles3(ctx); if (!shProg) { - _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramiv(program)"); return; } @@ -764,11 +763,25 @@ static void get_program_info_log(struct gl_context *ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) { - struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, program); + struct gl_shader_program *shProg; + + /* Section 2.5 GL Errors (page 18) of the OpenGL ES 3.0.4 spec and + * section 2.3.1 (Errors) of the OpenGL 4.5 spec say: + * + * "If a negative number is provided where an argument of type sizei or + * sizeiptr is specified, an INVALID_VALUE error is generated." + */ + if (bufSize < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramInfoLog(bufSize < 0)"); + return; + } + + shProg = _mesa_lookup_shader_program_err(ctx, program, + "glGetProgramInfoLog(program)"); if (!shProg) { - _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramInfoLog(program)"); return; } + _mesa_copy_string(infoLog, bufSize, length, shProg->InfoLog); } @@ -777,11 +790,24 @@ static void get_shader_info_log(struct gl_context *ctx, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) { - struct gl_shader *sh = _mesa_lookup_shader(ctx, shader); + struct gl_shader *sh; + + /* Section 2.5 GL Errors (page 18) of the OpenGL ES 3.0.4 spec and + * section 2.3.1 (Errors) of the OpenGL 4.5 spec say: + * + * "If a negative number is provided where an argument of type sizei or + * sizeiptr is specified, an INVALID_VALUE error is generated." + */ + if (bufSize < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGetShaderInfoLog(bufSize < 0)"); + return; + } + + sh = _mesa_lookup_shader_err(ctx, shader, "glGetShaderInfoLog(shader)"); if (!sh) { - _mesa_error(ctx, GL_INVALID_VALUE, "glGetShaderInfoLog(shader)"); return; } + _mesa_copy_string(infoLog, bufSize, length, sh->InfoLog); } |