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;