X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglx%2Findirect_vertex_array.c;h=0025cbbd078135110c2bf3622f7f0676d4fe77dd;hb=2f1fc8db108eb771414aa5440d4c439f63f4e7c1;hp=c723c9eeb73249b2ddea8ac336fad1512a2050a0;hpb=1a1db1746db82efc7f0643508886dfc78a15eb71;p=mesa.git diff --git a/src/glx/indirect_vertex_array.c b/src/glx/indirect_vertex_array.c index c723c9eeb73..0025cbbd078 100644 --- a/src/glx/indirect_vertex_array.c +++ b/src/glx/indirect_vertex_array.c @@ -135,9 +135,6 @@ __glXFreeVertexArrayState(struct glx_context * gc) * struct glx_context::server_minor, and __GLXcontext::server_major have been * initialized. These values are used to determine what vertex arrays are * supported. - * - * \bug - * Return values from malloc are not properly tested. */ void __glXInitVertexArrayState(struct glx_context * gc) @@ -154,7 +151,11 @@ __glXInitVertexArrayState(struct glx_context * gc) arrays = calloc(1, sizeof(struct array_state_vector)); - state->array_state = arrays; + + if (arrays == NULL) { + __glXSetError(gc, GL_OUT_OF_MEMORY); + return; + } arrays->old_DrawArrays_possible = !state->NoDrawArraysProtocol; arrays->new_DrawArrays_possible = GL_FALSE; @@ -204,6 +205,12 @@ __glXInitVertexArrayState(struct glx_context * gc) arrays->num_arrays = array_count; arrays->arrays = calloc(array_count, sizeof(struct array_state)); + if (arrays->arrays == NULL) { + free(arrays); + __glXSetError(gc, GL_OUT_OF_MEMORY); + return; + } + arrays->arrays[0].data_type = GL_FLOAT; arrays->arrays[0].count = 3; arrays->arrays[0].key = GL_NORMAL_ARRAY; @@ -289,6 +296,18 @@ __glXInitVertexArrayState(struct glx_context * gc) arrays->stack = malloc(sizeof(struct array_stack_state) * arrays->num_arrays * __GL_CLIENT_ATTRIB_STACK_DEPTH); + + if (arrays->stack == NULL) { + free(arrays->arrays); + free(arrays); + __glXSetError(gc, GL_OUT_OF_MEMORY); + return; + } + + /* Everything went ok so we put vertex array state in place + * in context. + */ + state->array_state = arrays; } @@ -1056,7 +1075,7 @@ __indirect_glMultiDrawArrays(GLenum mode, const GLint *first, void __indirect_glMultiDrawElementsEXT(GLenum mode, const GLsizei * count, - GLenum type, const GLvoid ** indices, + GLenum type, const GLvoid * const * indices, GLsizei primcount) { struct glx_context *gc = __glXGetCurrentContext();