renderer: fix memory leak in vertex elements state create

Reported-by: Li Qiang
Free the vertex array in error path.
This was introduced by this commit:
renderer: fix heap overflow in vertex elements state create.

I rewrote the code to not require the allocation in the first
place if we have an error, seems nicer.

Signed-off-by: Dave Airlie <airlied@redhat.com>
macos/master
Dave Airlie 8 years ago
parent affd94f7e5
commit 737c335085
  1. 9
      src/vrend_renderer.c

@ -1648,18 +1648,19 @@ int vrend_create_vertex_elements_state(struct vrend_context *ctx,
unsigned num_elements, unsigned num_elements,
const struct pipe_vertex_element *elements) const struct pipe_vertex_element *elements)
{ {
struct vrend_vertex_element_array *v = CALLOC_STRUCT(vrend_vertex_element_array); struct vrend_vertex_element_array *v;
const struct util_format_description *desc; const struct util_format_description *desc;
GLenum type; GLenum type;
int i; int i;
uint32_t ret_handle; uint32_t ret_handle;
if (!v)
return ENOMEM;
if (num_elements > PIPE_MAX_ATTRIBS) if (num_elements > PIPE_MAX_ATTRIBS)
return EINVAL; return EINVAL;
v = CALLOC_STRUCT(vrend_vertex_element_array);
if (!v)
return ENOMEM;
v->count = num_elements; v->count = num_elements;
for (i = 0; i < num_elements; i++) { for (i = 0; i < num_elements; i++) {
memcpy(&v->elements[i].base, &elements[i], sizeof(struct pipe_vertex_element)); memcpy(&v->elements[i].base, &elements[i], sizeof(struct pipe_vertex_element));

Loading…
Cancel
Save