все функции PHP, связанные с exec, segfault

Я создаю PHP для android с помощью NDK. Большинство проверенных функций работают отлично, за исключением …

Все связанные с PHP функции php (например, exec, shell_exec, popen, ..) все sefgault.

Код примера php (test.php)

<?php $s=shell_exec("ls"); echo $s ?> 

результат:

 # php test.php [1] Segmentation fault 

Я добавил код отладки во внутреннюю функцию shell_exec

 PHP_FUNCTION(shell_exec) { FILE *in; size_t total_readbytes; zval **cmd; char *ret; php_stream *stream; if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) { WRONG_PARAM_COUNT; } if (PG(safe_mode)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute using backquotes in Safe Mode"); RETURN_FALSE; } convert_to_string_ex(cmd); #ifdef PHP_WIN32 if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) { #else if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) { #endif php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd)); RETURN_FALSE; } stream = php_stream_fopen_from_pipe(in, "rb"); total_readbytes = php_stream_copy_to_mem(stream, &ret, PHP_STREAM_COPY_ALL, 0); php_stream_close(stream); printf("TEST\n%s\n",ret); if (total_readbytes > 0) { RETURN_STRINGL(ret, total_readbytes, 0); } else { RETURN_NULL(); } } 

результат

 # php test.php TEST test.php [1] Segmentation fault 

Я решил
– exec ls работает нормально
– результат ls в порядке

Все еще что-то не так.

Вопрос 1:
Может ли кто-нибудь указать мне на раздел кода, где выполняется PHP_FUNCTION (shell_exec), поэтому я могу попытаться увидеть более подробную информацию о том, где это происходит

Вопрос 2:
Любые намеки на то, что может быть неправильным.

Информация о версии
Android 2.3.1
Android NDK 6
PHP 5.2.17

Solutions Collecting From Web of "все функции PHP, связанные с exec, segfault"

Thanx анонимному, который присылает мне электронное письмо с некоторыми полезными советами.

Как выясняется, php использует popen для своего кода, связанного с exec. Некоторым может быть известно, что андроиды бионной версии popen были довольно глючными до ICS, и он знает поврежденный стек.

Я изменил php, чтобы использовать измененный вариант popen. Теперь php exec / shell_exec и т. Д. Все работают без проблем