Ошибка Segfault при использовании zend_call_function () - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь деформировать библиотеку C вокруг PHP-класса, используя PHP Zend Engine.Функция-конструктор класса должна принимать строку и указатель на функцию.Я смог извлечь строковые значения из аргументов __construct и распечатать их.Однако, когда я получаю функцию и пытаюсь заставить ее работать в конструкторе класса.Я получаю ошибку segfault.

По сути, конечный результат должен выглядеть примерно так:

class TestClass
{
   function __construct(callable: $callBack, string: $name);
}

(Естественно, в классе есть другие методы, но у меня не было с ними проблем),Расширение C выглядит так:

PHP_METHOD(TestClass, __construct)
{
    zend_string* name;
    zend_fcall_info fci;
    zend_fcall_info_cache fci_cache;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "fS", &fci, &fci_cache, &name) == FAILURE)
        return;
    php_printf("name: %s\n", ZSTR_VAL(name));
    if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS) {
        php_printf("Called");
    }
    zval* obj = getThis();
    test_class_t* intern;
    intern = Z_TSTOBJ_P(obj);
    php_printf("Constructor\n");
    zend_string_release(name);
    if (fci.params)
        efree(fci.params);
}

Segfault не происходит, когда zend_call_function закомментирован.Я использую 7.2.19 и C99.Есть ли способ решить эту проблему?

Спасибо

...