gamelaster |
06-23-2015 11:24 AM |
PHP - zend_hash_find throwing segmentation fault
Good day,
first, this is a first forum where i though i can write my trouble, so if im wrong, + move or delete. Thanks
To topic, i trying to run a (relative) old DBUS library for PHP ( https://github.com/GAMELASTER/php-dbus - my fork and upgrade for success building) and SkypePHP library ( https://github.com/fujimoto/php-skype ). I successfully fixed a DBUS (just trivial forgot of rename) and builded. When i execute skype_bot.php from console as root, its little work but then PHP throw Segmentation fault. Im not a newbie in programming and linux, but with c++ and linux building-debugging i dont have some skills. But i gets a GDB dump and found the root of trouble.
GDB pastebins:
http://pastebin .com/aXnumw74
http://pastebin .com/kWsKkipV
PHP Code:
/* {{{ _dbus_message_resource */ static DBusMessage* _dbus_message_resource(zval *obj TSRMLS_DC) { zval **tmp; int resource_type; if (obj == NULL) { return NULL; } dbus_objprop_get(*obj, "message", tmp, 0); // line 308 if (tmp == NULL) { return NULL; } void *message = (void*)zend_list_find(Z_LVAL_PP(tmp), &resource_type); if (message == NULL || resource_type != le_dbus_message) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "message identifier not found"); return NULL; } return message; }
Here is macro for dbus_objprop_get:
PHP Code:
#define dbus_objprop_get(zv, key, element, on_error) { \ fprintf(stderr, "execute dbus_objprop_get\n");\ if (zend_hash_find(Z_OBJPROP(zv), key, strlen(key)+1, (void**)&element) != SUCCESS) { \ fprintf(stderr, "all good\n");\ php_error_docref(NULL TSRMLS_CC, E_WARNING, "property [%s] is not set", key); \ fprintf(stderr, "good2\n");\ element = NULL; \ on_error; \ } \ }
So trouble is in zend_hash_find... As i said, i dont have so much experiences but... :-) I tryied to print a zv, key, element, on_error ... But i dont knowed the values of zend_hash_find so i cant fprintf (my low skills in C++). So, what to do now?
Thanks
P.S. If im fully wrong, where i can ask to this problem? (I tryied ask a author of PHP DBUS but he is inactive... :/ )
|