eet: handling memory leak on realloc fail.
authorSrivardhan Hebbar <sri.hebbar@samsung.com>
Thu, 22 Oct 2015 19:25:37 +0000 (12:25 -0700)
committerCedric BAIL <cedric@osg.samsung.com>
Thu, 22 Oct 2015 19:25:39 +0000 (12:25 -0700)
Summary: Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>

Reviewers: cedric

Differential Revision: https://phab.enlightenment.org/D3208

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
src/lib/eet/eet_data.c

index f2ad492..a0c5864 100644 (file)
@@ -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;