From 2887dd21170982df8f8d5fd2367166026a6842ac Mon Sep 17 00:00:00 2001 From: hasufell Date: Wed, 7 May 2014 21:13:29 +0200 Subject: [PATCH] Fix realloc() usage We must not do: foo = realloc(foo, ...) if realloc fails, then we have no idea about it, so we have to use temporary NULL initialized pointers. --- parser.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/parser.c b/parser.c index bb0ff46..3190706 100644 --- a/parser.c +++ b/parser.c @@ -67,6 +67,7 @@ HE_face *parse_obj(char const * const filename) if (!strcmp(str_tmp_ptr, "v")) { /* parse vertices */ char *myfloat = NULL; + HE_vert *tmp_ptr; /* fill x */ myfloat = strtok_r(NULL, " ", &str_ptr_space); @@ -84,9 +85,14 @@ HE_face *parse_obj(char const * const filename) vertices[vc - 1].z = atof(myfloat); vc++; - vertices = realloc(vertices, + tmp_ptr = realloc(vertices, vert_size * vc); - CHECK_PTR_VAL(vertices); + CHECK_PTR_VAL(tmp_ptr); + vertices = tmp_ptr; + + /* exceeds 3 dimensions, malformed vertice */ + if (strtok_r(NULL, " ", &str_ptr_space)) + return NULL; } else if (!strcmp(str_tmp_ptr, "f")) { /* parse faces */ /* TODO */ }