fix segfault when there is no text in clipboard

Test Plan: cnp a clipboard content without text

Reviewers: zmike

Reviewed By: zmike

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11565
This commit is contained in:
Vincent Torri 2020-03-26 10:47:34 -04:00 committed by Mike Blumenkrantz
parent 19c57d38db
commit e0f5e80f78
1 changed files with 18 additions and 12 deletions

View File

@ -1292,22 +1292,28 @@ _ecore_evas_win32_selection_request(Ecore_Evas *ee EINA_UNUSED, unsigned int sea
Eina_Rw_Slice slice;
data = ecore_win32_clipboard_get((Ecore_Win32_Window *)ee->prop.window, &size, mime_type);
if (eina_str_has_prefix(mime_type, "text/"))
if (size != 0)
{
//ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
slice.len = size + 1;
slice.mem = eina_memdup(data, size, EINA_TRUE);
if (eina_str_has_prefix(mime_type, "text/"))
{
//ensure that we always have a \0 at the end, there is no assertion that \0 is included here.
slice.len = size + 1;
slice.mem = eina_memdup(data, size, EINA_TRUE);
free(data);
}
else
{
slice.len = size;
slice.mem = data;
}
content = eina_content_new(eina_rw_slice_slice_get(slice), mime_type);
if (!content) // construction can fail because of some validation reasons
eina_promise_reject(promise, ecore_evas_no_matching_type);
else
eina_promise_resolve(promise, eina_value_content_init(content));
}
else
{
slice.len = size;
slice.mem = data;
}
content = eina_content_new(eina_rw_slice_slice_get(slice), mime_type);
if (!content) // construction can fail because of some validation reasons
eina_promise_reject(promise, ecore_evas_no_matching_type);
else
eina_promise_resolve(promise, eina_value_content_init(content));
}
return future;
}