From f3d1db0fbadd1a41eed61a6b5c3ad83419042843 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Wed, 11 Dec 2013 22:40:15 +0900 Subject: [PATCH] evas - evas_gl - fix shader patch to not free static strings parsing problem with opengl_strtok() which would free the previous token "p", but in some cases it would be a const string. this should fix CID 1039653 --- src/modules/evas/engines/gl_common/evas_gl_api.c | 9 ++++++--- src/modules/evas/engines/software_generic/evas_engine.c | 9 ++++++--- 2 files changed, 12 insertions(+), 6 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 6b93548524..0871467cbe 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_api.c +++ b/src/modules/evas/engines/gl_common/evas_gl_api.c @@ -2120,15 +2120,18 @@ do_eglShaderPatch(const char *source, int length, int *patched_len) { if (!strncmp(p, "gl_MaxVertexUniformVectors", 26)) { - p = "(gl_MaxVertexUniformComponents / 4)"; + free(p); + p = strdup("(gl_MaxVertexUniformComponents / 4)"); } else if (!strncmp(p, "gl_MaxFragmentUniformVectors", 28)) { - p = "(gl_MaxFragmentUniformComponents / 4)"; + free(p); + p = strdup("(gl_MaxFragmentUniformComponents / 4)"); } else if (!strncmp(p, "gl_MaxVaryingVectors", 20)) { - p = "(gl_MaxVaryingFloats / 4)"; + free(p); + p = strdup("(gl_MaxVaryingFloats / 4)"); } int new_len = strlen(p); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 60c639a085..3fb420a395 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -3330,15 +3330,18 @@ patch_gles_shader(const char *source, int length, int *patched_len) { if (!strncmp(p, "gl_MaxVertexUniformVectors", 26)) { - p = "(gl_MaxVertexUniformComponents / 4)"; + free(p); + p = strdup("(gl_MaxVertexUniformComponents / 4)"); } else if (!strncmp(p, "gl_MaxFragmentUniformVectors", 28)) { - p = "(gl_MaxFragmentUniformComponents / 4)"; + free(p); + p = strdup("(gl_MaxFragmentUniformComponents / 4)"); } else if (!strncmp(p, "gl_MaxVaryingVectors", 20)) { - p = "(gl_MaxVaryingFloats / 4)"; + free(p); + p = strdup("(gl_MaxVaryingFloats / 4)"); } int new_len = strlen(p);