summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2017-02-28 14:52:09 +1000
committerDave Airlie <airlied@redhat.com>2017-02-28 14:52:09 +1000
commit737c3350850ca4dbc5633b3bdb4118176ce59920 (patch)
tree14c456705bf0202580ef8344aa8267646e98481c
parentaffd94f7e5f71f2a7e077719ba1ab15c6c188f2e (diff)
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>
-rw-r--r--src/vrend_renderer.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index 1bca7ad..e5d9f5c 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -1648,18 +1648,19 @@ int vrend_create_vertex_elements_state(struct vrend_context *ctx,
unsigned num_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;
GLenum type;
int i;
uint32_t ret_handle;
- if (!v)
- return ENOMEM;
-
if (num_elements > PIPE_MAX_ATTRIBS)
return EINVAL;
+ v = CALLOC_STRUCT(vrend_vertex_element_array);
+ if (!v)
+ return ENOMEM;
+
v->count = num_elements;
for (i = 0; i < num_elements; i++) {
memcpy(&v->elements[i].base, &elements[i], sizeof(struct pipe_vertex_element));