raster pushed a commit to branch efl-1.20.

http://git.enlightenment.org/core/efl.git/commit/?id=f9a3e1348cd5f04dfd9c7415479dea204cd7db83

commit f9a3e1348cd5f04dfd9c7415479dea204cd7db83
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Fri Sep 15 07:44:58 2017 +0900

    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
---
 src/lib/ecore/ecore_exe_posix.c | 12 ++++++++----
 src/lib/ecore/ecore_exe_win32.c | 16 ++++++++++------
 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. */

-- 


Reply via email to