summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2013-12-11 22:44:42 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2013-12-11 22:44:42 +0900
commit6a75806e54e6f5da85ad69753f72574bea03b61e (patch)
tree1aa092d39280f9d8ebcb61f3d3e8112c0c37d4be /src
parentf3d1db0fbadd1a41eed61a6b5c3ad83419042843 (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.c13
-rw-r--r--src/modules/evas/engines/software_generic/evas_engine.c14
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);