mirror of
https://github.com/php/php-src.git
synced 2024-09-22 18:37:25 +00:00
fix #34505 (possible memory corruption when unmangling properties with empty names)
2nd part
This commit is contained in:
parent
f43767b249
commit
4b9b5505f0
@ -1669,9 +1669,9 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo
|
||||
zval **zprop;
|
||||
char *str_key;
|
||||
ulong index;
|
||||
int key_type;
|
||||
int key_type, str_key_len;
|
||||
|
||||
key_type = zend_hash_get_current_key(prop, &str_key, &index, FALSE);
|
||||
key_type = zend_hash_get_current_key_ex(prop, &str_key, &str_key_len, &index, FALSE, NULL);
|
||||
zend_hash_get_current_data(prop, (void **)&zprop);
|
||||
|
||||
property = master_to_xml(get_conversion((*zprop)->type), (*zprop), style, xmlParam);
|
||||
@ -1682,7 +1682,7 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo
|
||||
if (Z_TYPE_P(data) == IS_OBJECT) {
|
||||
char *class_name;
|
||||
|
||||
zend_unmangle_property_name(str_key, &class_name, &prop_name);
|
||||
zend_unmangle_property_name_ex(str_key, str_key_len, &class_name, &prop_name);
|
||||
} else {
|
||||
prop_name = str_key;
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ PHPAPI int php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
|
||||
/* private or protected property access outside of the class */
|
||||
continue;
|
||||
}
|
||||
zend_unmangle_property_name(key, &tmp, &key);
|
||||
zend_unmangle_property_name_ex(key, key_len, &tmp, &key);
|
||||
key_len = strlen(key);
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ static int php_object_property_dump(zval **zv, int num_args, va_list args, zend_
|
||||
if (hash_key->nKeyLength ==0 ) { /* numeric key */
|
||||
php_printf("%*c[%ld]=>\n", level + 1, ' ', hash_key->h);
|
||||
} else { /* string key */
|
||||
zend_unmangle_property_name(hash_key->arKey, &class_name, &prop_name);
|
||||
zend_unmangle_property_name_ex(hash_key->arKey, hash_key->nKeyLength, &class_name, &prop_name);
|
||||
if (class_name) {
|
||||
php_printf("%*c[\"%s", level + 1, ' ', prop_name);
|
||||
if (class_name[0]=='*') {
|
||||
@ -351,7 +351,7 @@ static int php_object_element_export(zval **zv, int num_args, va_list args, zend
|
||||
|
||||
if (hash_key->nKeyLength != 0) {
|
||||
php_printf("%*c", level + 1, ' ');
|
||||
zend_unmangle_property_name(hash_key->arKey, &class_name, &prop_name);
|
||||
zend_unmangle_property_name_ex(hash_key->arKey, hash_key->nKeyLength, &class_name, &prop_name);
|
||||
if (class_name) {
|
||||
if (class_name[0] == '*') {
|
||||
php_printf("protected");
|
||||
|
@ -524,7 +524,7 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
|
||||
if (zend_hash_get_current_key_ex(HASH_OF(obj), &key, &key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
|
||||
char *class_name, *prop_name;
|
||||
|
||||
zend_unmangle_property_name(key, &class_name, &prop_name);
|
||||
zend_unmangle_property_name_ex(key, key_len, &class_name, &prop_name);
|
||||
php_wddx_serialize_var(packet, *ent, prop_name, strlen(prop_name)+1 TSRMLS_CC);
|
||||
} else {
|
||||
key_len = sprintf(tmp_buf, "%ld", idx);
|
||||
|
Loading…
Reference in New Issue
Block a user