summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2017-09-15 07:44:58 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2017-09-15 08:00:51 +0900
commitf9a3e1348cd5f04dfd9c7415479dea204cd7db83 (patch)
treef435243dcffb0fe0f3656be1e9e65dec827a86a2
parentfca724bae2635718251f923cfa7db7063fb866a8 (diff)
downloadefl-f9a3e1348cd5f04dfd9c7415479dea204cd7db83.tar.gz
ecore exe - fix fix malloc fail handling
for both ecore_exe_win32.c and ecore_exe_posix.c when the rare case (basically almost never) that malloc fails for the exe read/err buffers also set the data size to 0 so it doesn't lie with a NULL ptr for data. @fix
-rw-r--r--src/lib/ecore/ecore_exe_posix.c12
-rw-r--r--src/lib/ecore/ecore_exe_win32.c16
2 files changed, 18 insertions, 10 deletions
diff --git a/src/lib/ecore/ecore_exe_posix.c b/src/lib/ecore/ecore_exe_posix.c
index cf42371b91..7bad36408d 100644
--- a/src/lib/ecore/ecore_exe_posix.c
+++ b/src/lib/ecore/ecore_exe_posix.c
@@ -710,20 +710,24 @@ _impl_ecore_exe_event_data_get(Ecore_Exe *obj,
exe->read_data_size = i - last;
exe->read_data_buf = malloc(exe->read_data_size);
if (exe->read_data_buf)
+ memcpy(exe->read_data_buf, c, exe->read_data_size);
+ else
{
- memcpy(exe->read_data_buf, c, exe->read_data_size);
+ exe->read_data_size = 0;
+ ERR("Out of memory in allocating exe pipe data");
}
- else ERR("Out of memory in allocating exe pipe data");
}
else
{
exe->error_data_size = i - last;
exe->error_data_buf = malloc(exe->error_data_size);
if (exe->error_data_buf)
+ memcpy(exe->error_data_buf, c, exe->error_data_size);
+ else
{
- memcpy(exe->error_data_buf, c, exe->error_data_size);
+ exe->error_data_size = 0;
+ ERR("Out of memory in allocating exe pipe data");
}
- else ERR("Out of memory in allocating exe pipe data");
}
}
if (count == 0) /* No lines to send, cancel the event. */
diff --git a/src/lib/ecore/ecore_exe_win32.c b/src/lib/ecore/ecore_exe_win32.c
index e437b5aff6..80a4e70487 100644
--- a/src/lib/ecore/ecore_exe_win32.c
+++ b/src/lib/ecore/ecore_exe_win32.c
@@ -664,23 +664,27 @@ _impl_ecore_exe_event_data_get(Ecore_Exe *obj,
if (count != 0) e->size = last;
if (flags & ECORE_EXE_PIPE_READ)
{
+ exe->pipe_read.data_size = i - last;
exe->pipe_read.data_buf = malloc(exe->pipe_read.data_size);
if (exe->pipe_read.data_buf)
+ memcpy(exe->pipe_read.data_buf, c, exe->pipe_read.data_size);
+ else
{
- exe->pipe_read.data_size = i - last;
- memcpy(exe->pipe_read.data_buf, c, exe->pipe_read.data_size);
+ exe->pipe_read.data_size = 0;
+ ERR("Out of memory in allocating exe pipe data");
}
- else ERR("Out of memory in allocating exe pipe data");
}
else
{
+ exe->pipe_error.data_size = i - last;
exe->pipe_error.data_buf = malloc(exe->pipe_error.data_size);
if (exe->pipe_error.data_buf)
+ memcpy(exe->pipe_error.data_buf, c, exe->pipe_error.data_size);
+ else
{
- exe->pipe_error.data_size = i - last;
- memcpy(exe->pipe_error.data_buf, c, exe->pipe_error.data_size);
+ exe->pipe_error.data_size = 0;
+ ERR("Out of memory in allocating exe pipe data");
}
- else ERR("Out of memory in allocating exe pipe data");
}
}
if (count == 0) /* No lines to send, cancel the event. */