A patch is attached to prevent segfault inside
dir_handler.c:axis2_dir_handler_list_services_or_modules_in_dir (this
happens when PHP extension calls this fn to create service client)
Pls review and apply.

As Samisa pointed this crash may be due to how PHP handles malloc/free
(the above fn calls system scandir fn which does its own malloc/free)

As a solution to this, we may need to use our own version of scandir for
Linux as well (there's a scandir written for windows)

-Nabeel

Index: dir_handler.c
===================================================================
--- dir_handler.c       (revision 388149)
+++ dir_handler.c       (working copy)
@@ -75,8 +75,8 @@
             }
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
-            AXIS2_FREE((*env)->allocator, *files);
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, *files);
+            AXIS2_FREE((*env)->allocator, files);*/
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);
             return NULL;
         }
@@ -101,8 +101,8 @@
             }
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
-            AXIS2_FREE((*env)->allocator, *files);
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, *files);
+            AXIS2_FREE((*env)->allocator, files);*/
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);
             return NULL;
         }
@@ -127,8 +127,8 @@
             }
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
-            AXIS2_FREE((*env)->allocator, *files);
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, *files);
+            AXIS2_FREE((*env)->allocator, files);*/
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);
             return NULL;
         }
@@ -155,8 +155,8 @@
             }
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
-            AXIS2_FREE((*env)->allocator, *files);
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, *files);
+            AXIS2_FREE((*env)->allocator, files);*/
             return NULL;
         }
         AXIS2_FREE((*env)->allocator, path);
@@ -166,8 +166,8 @@
         arch_file = NULL;
         fname = NULL;
     }
-    AXIS2_FREE((*env)->allocator, *files);
-    AXIS2_FREE((*env)->allocator, files);
+    /*AXIS2_FREE((*env)->allocator, *files);
+    AXIS2_FREE((*env)->allocator, files);*/
     return file_list;
 }
 
@@ -231,7 +231,7 @@
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
             /*AXIS2_FREE((*env)->allocator, *files);*/
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, files);*/
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);
             return NULL;
         }
@@ -257,7 +257,7 @@
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
             /*AXIS2_FREE((*env)->allocator, *files);*/
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, files);*/
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);
             return NULL;
         }
@@ -285,7 +285,7 @@
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
             /*AXIS2_FREE((*env)->allocator, *files);*/
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, files);*/
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);
             return NULL;
         }
@@ -314,7 +314,7 @@
             AXIS2_ARRAY_LIST_FREE(file_list, env);
             file_list = NULL;
             /*AXIS2_FREE((*env)->allocator, *files);*/
-            AXIS2_FREE((*env)->allocator, files);
+            /*AXIS2_FREE((*env)->allocator, files);*/
             return NULL;
             
         }
@@ -328,7 +328,7 @@
 #ifndef WIN32
 
     /*AXIS2_FREE((*env)->allocator, *files);*/
-    AXIS2_FREE((*env)->allocator, files);
+    /*AXIS2_FREE((*env)->allocator, files);*/
 
 #endif 
     return file_list;

Reply via email to