elm cnp - wl - fix memory leak

fix memory leak specified in CID 1357160 , 1357159 , 1357158 , 1357157
This commit is contained in:
Carsten Haitzler 2016-07-08 15:16:06 +09:00
parent 85d45ee9b1
commit 4bc6ba4ff0
1 changed files with 24 additions and 5 deletions

View File

@ -2648,6 +2648,11 @@ _wl_selection_parser(void *_data, int size, char ***ret_data, int *ret_count)
files = t2; files = t2;
files[num_files - 1] = strdup(tmp); files[num_files - 1] = strdup(tmp);
} }
else
{
num_files--;
goto freetmp;
}
tmp[0] = 0; tmp[0] = 0;
i = 0; i = 0;
} }
@ -2663,13 +2668,25 @@ _wl_selection_parser(void *_data, int size, char ***ret_data, int *ret_count)
files = t2; files = t2;
files[num_files - 1] = strdup(tmp); files[num_files - 1] = strdup(tmp);
} }
else
{
num_files--;
goto freetmp;
}
} }
freetmp:
free(tmp); free(tmp);
free(data);
} }
done: done:
free(data);
if (ret_data) *ret_data = files; if (ret_data) *ret_data = files;
else
{
int i;
for (i = 0; i < num_files; i++) free(files[i]);
free(files);
}
if (ret_count) *ret_count = num_files; if (ret_count) *ret_count = num_files;
} }
@ -2707,12 +2724,12 @@ _wl_data_preparer_uri(Wl_Cnp_Selection *sel, Elm_Selection_Data *ddata, Ecore_Wl
Eina_Strbuf *strbuf; Eina_Strbuf *strbuf;
int i; int i;
strbuf = eina_strbuf_new();
if (!strbuf) return EINA_FALSE;
_wl_selection_parser(ev->data, ev->len, &files, &num_files); _wl_selection_parser(ev->data, ev->len, &files, &num_files);
cnp_debug("got a files list\n"); cnp_debug("got a files list\n");
strbuf = eina_strbuf_new();
if (!strbuf)
return EINA_FALSE;
for (i = 0; i < num_files; i++) for (i = 0; i < num_files; i++)
{ {
uri = efreet_uri_decode(files[i]); uri = efreet_uri_decode(files[i]);
@ -2727,7 +2744,9 @@ _wl_data_preparer_uri(Wl_Cnp_Selection *sel, Elm_Selection_Data *ddata, Ecore_Wl
} }
if (i < (num_files - 1)) if (i < (num_files - 1))
eina_strbuf_append(strbuf, "\n"); eina_strbuf_append(strbuf, "\n");
free(files[i]);
} }
free(files);
stripstr = eina_strbuf_string_steal(strbuf); stripstr = eina_strbuf_string_steal(strbuf);
eina_strbuf_free(strbuf); eina_strbuf_free(strbuf);
} }