From 71e68dcca6518e313738d276d1ac88a71cb43098 Mon Sep 17 00:00:00 2001 From: Srivardhan Hebbar Date: Thu, 22 Oct 2015 12:25:37 -0700 Subject: [PATCH] eet: handling memory leak on realloc fail. Summary: Signed-off-by: Srivardhan Hebbar Reviewers: cedric Differential Revision: https://phab.enlightenment.org/D3208 Signed-off-by: Cedric BAIL --- src/lib/eet/eet_data.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/lib/eet/eet_data.c b/src/lib/eet/eet_data.c index f2ad492982..a0c5864d3a 100644 --- a/src/lib/eet/eet_data.c +++ b/src/lib/eet/eet_data.c @@ -2810,21 +2810,28 @@ _eet_data_dump_token_get(const char *src, int *len) { const char *p; - char *tok = NULL; + char *tok = NULL, *temp; int in_token = 0; int in_quote = 0; int in_escape = 0; int tlen = 0, tsize = 0; -#define TOK_ADD(x) \ - do { \ - tlen++; \ - if (tlen >= tsize) \ - { \ - tsize += 32; \ - tok = realloc(tok, tsize); \ - } \ - tok[tlen - 1] = x; \ +#define TOK_ADD(x) \ + do { \ + tlen++; \ + if (tlen >= tsize) \ + { \ + tsize += 32; \ + temp = tok; \ + tok = realloc(tok, tsize); \ + if (!tok) \ + { \ + tok = temp; \ + ERR("Realloc failed\n"); \ + goto realloc_error; \ + } \ + } \ + tok[tlen - 1] = x; \ } while (0) for (p = src; *len > 0; p++, (*len)--) @@ -2890,6 +2897,7 @@ _eet_data_dump_token_get(const char *src, return tok; } +realloc_error: free(tok); return NULL;