edje: fix potential memory leak.

next_token() requires free() for it's returned value and a string attribute
Here logic didn't take care of the memory usage.

@fix
This commit is contained in:
Hermet Park 2018-04-09 11:14:07 +09:00
parent 9470252450
commit d5c913c60b
1 changed files with 19 additions and 1 deletions

View File

@ -64,7 +64,7 @@ static void
code_parse_internal(Code *code) code_parse_internal(Code *code)
{ {
Code_Symbol *sym = NULL, *func = NULL; Code_Symbol *sym = NULL, *func = NULL;
Token *token, *tmp; Token *token, *tmp = NULL;
char *begin = code->shared; char *begin = code->shared;
char *end = begin + strlen(begin); char *end = begin + strlen(begin);
char *body; char *body;
@ -92,9 +92,18 @@ code_parse_internal(Code *code)
token = tmp; token = tmp;
break; break;
} }
if (tmp->str) free(tmp->str);
free(tmp);
} }
} }
if (tmp)
{
if (tmp->str) free(tmp->str);
free(tmp);
}
switch (token->type) switch (token->type)
{ {
case TOKEN_TYPE_COLON: case TOKEN_TYPE_COLON:
@ -176,6 +185,9 @@ code_parse_internal(Code *code)
} }
if (!depth) if (!depth)
break; break;
if (tmp->str) free(tmp->str);
free(tmp);
} }
if ((begin - 1) > body) if ((begin - 1) > body)
{ {
@ -204,6 +216,12 @@ code_parse_internal(Code *code)
if (token->str) if (token->str)
free(token->str); free(token->str);
free(token); free(token);
if (tmp)
{
if (tmp->str) free(tmp->str);
free(tmp);
}
} }
eina_array_free(name_stack); eina_array_free(name_stack);