X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2Fsvgtiny_gradient.c;h=4b327ddbcc2045260bb35f2f590e0fcd99478be7;hb=ced1bcad78ea063413b302a413e2747f81321e12;hp=b282f45cb35d61738fd63cc9e4ace784c986d03a;hpb=1e71d0472529b96ac35e2e4425b66e29146a01c1;p=libsvgtiny.git diff --git a/src/svgtiny_gradient.c b/src/svgtiny_gradient.c index b282f45..4b327dd 100644 --- a/src/svgtiny_gradient.c +++ b/src/svgtiny_gradient.c @@ -237,7 +237,7 @@ svgtiny_code svgtiny_parse_linear_gradient(dom_element *linear, (const uint8_t *) s, strcspn(s, "; "), &value); - if (exc != DOM_NO_ERR && + if (exc == DOM_NO_ERR && value != NULL) { svgtiny_parse_color(value, &color, @@ -420,8 +420,10 @@ svgtiny_code svgtiny_add_path_linear_gradient(float *p, unsigned int n, gradient_norm_squared = gradient_dx * gradient_dx + gradient_dy * gradient_dy; pts = svgtiny_list_create(sizeof (struct grad_point)); - if (!pts) + if (!pts) { + free(p); return svgtiny_OUT_OF_MEMORY; + } for (j = 0; j != n; ) { int segment_type = (int) p[j]; struct grad_point *point; @@ -446,6 +448,7 @@ svgtiny_code svgtiny_add_path_linear_gradient(float *p, unsigned int n, gradient_norm_squared; point = svgtiny_list_push(pts); if (!point) { + free(p); svgtiny_list_free(pts); return svgtiny_OUT_OF_MEMORY; } @@ -524,6 +527,7 @@ svgtiny_code svgtiny_add_path_linear_gradient(float *p, unsigned int n, #endif point = svgtiny_list_push(pts); if (!point) { + free(p); svgtiny_list_free(pts); return svgtiny_OUT_OF_MEMORY; } @@ -551,6 +555,7 @@ svgtiny_code svgtiny_add_path_linear_gradient(float *p, unsigned int n, /* There must be at least a single point for the gradient */ if (svgtiny_list_size(pts) == 0) { svgtiny_list_free(pts); + free(p); return svgtiny_OK; }