diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2013-12-11 22:44:42 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2013-12-11 22:44:42 +0900 |
commit | 6a75806e54e6f5da85ad69753f72574bea03b61e (patch) | |
tree | 1aa092d39280f9d8ebcb61f3d3e8112c0c37d4be /src | |
parent | f3d1db0fbadd1a41eed61a6b5c3ad83419042843 (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_api.c | 13 | ||||
-rw-r--r-- | src/modules/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 0871467cb..a2ba18c54 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 3fb420a39..06bb479a2 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); |