From 6a75806e54e6f5da85ad69753f72574bea03b61e Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Wed, 11 Dec 2013 22:44:42 +0900 Subject: [PATCH] evas - evas gl - fix realloc failure case to handle it properly patched shader string realloc failure not handled right - could leak patched string and p. --- src/modules/evas/engines/gl_common/evas_gl_api.c | 13 ++++++++++--- .../evas/engines/software_generic/evas_engine.c | 14 ++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c b/src/modules/evas/engines/gl_common/evas_gl_api.c index 0871467cbe..a2ba18c542 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_api.c +++ b/src/modules/evas/engines/gl_common/evas_gl_api.c @@ -2137,10 +2137,17 @@ do_eglShaderPatch(const char *source, int length, int *patched_len) int new_len = strlen(p); if (*patched_len + new_len > patched_size) { - patched_size *= 2; - patched = realloc(patched, patched_size + 1); + char *tmp; - if (!patched) return NULL; + patched_size *= 2; + tmp = realloc(patched, patched_size + 1); + if (!tmp) + { + free(patched); + free(p); + return NULL; + } + patched = tmp; } memcpy(patched + *patched_len, p, new_len); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 3fb420a395..06bb479a25 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -3347,11 +3347,17 @@ patch_gles_shader(const char *source, int length, int *patched_len) int new_len = strlen(p); if (*patched_len + new_len > patched_size) { - patched_size *= 2; - patched = realloc(patched, patched_size + 1); + char *tmp; - if (!patched) - return NULL; + patched_size *= 2; + tmp = realloc(patched, patched_size + 1); + if (!tmp) + { + free(patched); + free(p); + return NULL; + } + patched = tmp; } memcpy(patched + *patched_len, p, new_len);