Also use the _ex variants where possible.
if (string_key) {
if (is_object) {
const char *prop_name, *class_name;
- int prop_len;
- int mangled = zend_unmangle_property_name_ex(string_key->val, string_key->len, &class_name, &prop_name, &prop_len);
+ size_t prop_len;
+ int mangled = zend_unmangle_property_name_ex(string_key, &class_name, &prop_name, &prop_len);
ZEND_WRITE_EX(prop_name, prop_len);
if (class_name && mangled == SUCCESS) {
zval *value;
HashTable *properties;
zend_string *key;
- const char *prop_name, *class_name;
- uint prop_len;
zend_object *zobj;
#ifndef FAST_ZPP
/* Not separating references */
if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
if (key->val[0] == 0) {
- zend_unmangle_property_name_ex(key->val, key->len, &class_name, &prop_name, (int*) &prop_len);
+ const char *prop_name, *class_name;
+ size_t prop_len;
+ zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len);
zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value);
} else {
zend_hash_add_new(Z_ARRVAL_P(return_value), key, value);
prop_name = zend_string_copy(property_info->name);
} else {
const char *pname;
- int pname_len;
+ size_t pname_len;
/* for private and protected we need to unmangle the names */
- zend_unmangle_property_name_ex(property_info->name->val, property_info->name->len,
+ zend_unmangle_property_name_ex(property_info->name,
&class_name_unused, &pname, &pname_len);
prop_name = zend_string_init(pname, pname_len, 0);
}
}
/* }}} */
-ZEND_API zend_string *zend_mangle_property_name(const char *src1, int src1_length, const char *src2, int src2_length, int internal) /* {{{ */
+ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, int internal) /* {{{ */
{
- zend_string *prop_name;
- int prop_name_length;
+ size_t prop_name_length = 1 + src1_length + 1 + src2_length;
+ zend_string *prop_name = zend_string_alloc(prop_name_length, internal);
- prop_name_length = 1 + src1_length + 1 + src2_length;
- prop_name = zend_string_alloc(prop_name_length, internal);
prop_name->val[0] = '\0';
memcpy(prop_name->val + 1, src1, src1_length+1);
memcpy(prop_name->val + 1 + src1_length + 1, src2, src2_length+1);
}
/* }}} */
-static int zend_strnlen(const char* s, int maxlen) /* {{{ */
+static int zend_strnlen(const char* s, size_t maxlen) /* {{{ */
{
- int len = 0;
+ size_t len = 0;
while (*s++ && maxlen--) len++;
return len;
}
/* }}} */
-ZEND_API int zend_unmangle_property_name_ex(const char *mangled_property, int len, const char **class_name, const char **prop_name, int *prop_len) /* {{{ */
+ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len) /* {{{ */
{
- int class_name_len;
+ size_t class_name_len;
*class_name = NULL;
- if (mangled_property[0]!=0) {
- *prop_name = mangled_property;
+ if (name->val[0] != '\0') {
+ *prop_name = name->val;
if (prop_len) {
- *prop_len = len;
+ *prop_len = name->len;
}
return SUCCESS;
}
- if (len < 3 || mangled_property[1]==0) {
+ if (name->len < 3 || name->val[1] == '\0') {
zend_error(E_NOTICE, "Illegal member variable name");
- *prop_name = mangled_property;
+ *prop_name = name->val;
if (prop_len) {
- *prop_len = len;
+ *prop_len = name->len;
}
return FAILURE;
}
- class_name_len = zend_strnlen(mangled_property + 1, --len - 1) + 1;
- if (class_name_len >= len || mangled_property[class_name_len]!=0) {
+ class_name_len = zend_strnlen(name->val + 1, name->len - 2);
+ if (class_name_len >= name->len - 2 || name->val[class_name_len + 1] != '\0') {
zend_error(E_NOTICE, "Corrupt member variable name");
- *prop_name = mangled_property;
+ *prop_name = name->val;
if (prop_len) {
- *prop_len = len + 1;
+ *prop_len = name->len;
}
return FAILURE;
}
- *class_name = mangled_property + 1;
- *prop_name = (*class_name) + class_name_len;
+
+ *class_name = name->val + 1;
+ *prop_name = name->val + class_name_len + 2;
if (prop_len) {
- *prop_len = len - class_name_len;
+ *prop_len = name->len - class_name_len - 2;
}
return SUCCESS;
}
ZEND_API void destroy_zend_class(zval *zv);
void zend_class_add_ref(zval *zv);
-ZEND_API zend_string *zend_mangle_property_name(const char *src1, int src1_length, const char *src2, int src2_length, int internal);
-#define zend_unmangle_property_name(mangled_property, mangled_property_len, class_name, prop_name) \
- zend_unmangle_property_name_ex(mangled_property, mangled_property_len, class_name, prop_name, NULL)
-ZEND_API int zend_unmangle_property_name_ex(const char *mangled_property, int mangled_property_len, const char **class_name, const char **prop_name, int *prop_len);
+ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, int internal);
+#define zend_unmangle_property_name(mangled_property, class_name, prop_name) \
+ zend_unmangle_property_name_ex(mangled_property, class_name, prop_name, NULL)
+ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len);
#define ZEND_FUNCTION_DTOR zend_function_dtor
#define ZEND_CLASS_DTOR destroy_zend_class
const char *class_name = NULL;
const char *prop_name;
zend_string *member;
- int prop_name_len;
+ size_t prop_name_len;
if (prop_info_name->val[0] == 0) {
- zend_unmangle_property_name_ex(prop_info_name->val, prop_info_name->len, &class_name, &prop_name, &prop_name_len);
+ zend_unmangle_property_name_ex(prop_info_name, &class_name, &prop_name, &prop_name_len);
member = zend_string_init(prop_name, prop_name_len, 0);
} else {
member = zend_string_copy(prop_info_name);
info.name = Z_STR_P(member);
} else if(property_info->name->val[0] == '\0'){
const char *class_name = NULL, *prop_name = NULL;
- zend_unmangle_property_name(property_info->name->val, property_info->name->len, &class_name, &prop_name);
+ size_t prop_name_len;
+ zend_unmangle_property_name_ex(property_info->name, &class_name,
+ &prop_name, &prop_name_len);
if (class_name) {
/* use unmangled name for protected properties */
- str = info.name = zend_string_init(prop_name, strlen(prop_name), 0);
+ str = info.name = zend_string_init(prop_name, prop_name_len, 0);
property_info = &info;
}
}
}
} else {
const char *class_name, *prop_name;
- int prop_name_len;
+ size_t prop_name_len;
zend_unmangle_property_name_ex(
- p->key->val, p->key->len, &class_name, &prop_name, &prop_name_len);
+ p->key, &class_name, &prop_name, &prop_name_len);
ZVAL_STRINGL(EX_VAR((opline+1)->result.var), prop_name, prop_name_len);
}
}
}
} else {
const char *class_name, *prop_name;
- int prop_name_len;
+ size_t prop_name_len;
zend_unmangle_property_name_ex(
- p->key->val, p->key->len, &class_name, &prop_name, &prop_name_len);
+ p->key, &class_name, &prop_name, &prop_name_len);
ZVAL_STRINGL(EX_VAR((opline+1)->result.var), prop_name, prop_name_len);
}
}
string_printf(str, "static ");
}
- zend_unmangle_property_name(prop->name->val, prop->name->len, &class_name, (const char**)&prop_name);
+ zend_unmangle_property_name(prop->name, &class_name, (const char**)&prop_name);
string_printf(str, "$%s", prop_name);
}
zval classname;
property_reference *reference;
const char *class_name, *prop_name;
- int prop_name_len;
+ size_t prop_name_len;
- zend_unmangle_property_name_ex(prop->name->val, prop->name->len, &class_name, &prop_name, &prop_name_len);
+ zend_unmangle_property_name_ex(prop->name, &class_name, &prop_name, &prop_name_len);
if (!(prop->flags & ZEND_ACC_PRIVATE)) {
/* we have to search the class hierarchy for this (implicit) public or protected property */
{
zval propname, cname, *classname;
char *name_str;
- const char *class_name, *prop_name;
size_t name_len;
int dynam_prop = 0;
zval *object;
}
if (dynam_prop == 0) {
- zend_unmangle_property_name(property_info->name->val, property_info->name->len, &class_name, &prop_name);
+ const char *class_name, *prop_name;
+ size_t prop_name_len;
+ zend_unmangle_property_name_ex(property_info->name, &class_name, &prop_name, &prop_name_len);
ZVAL_STR(&cname, zend_string_copy(property_info->ce->name));
- ZVAL_STRING(&propname, prop_name);
+ ZVAL_STRINGL(&propname, prop_name, prop_name_len);
} else {
ZVAL_STR(&cname, zend_string_copy(ce->name));
ZVAL_STRINGL(&propname, name_str, name_len);
ZVAL_DUP(return_value, &CE_STATIC_MEMBERS(intern->ce)[ref->prop.offset]);
} else {
const char *class_name, *prop_name;
+ size_t prop_name_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &object) == FAILURE) {
return;
}
- zend_unmangle_property_name(ref->prop.name->val, ref->prop.name->len, &class_name, &prop_name);
- member_p = zend_read_property(ref->ce, object, prop_name, strlen(prop_name), 1 TSRMLS_CC);
+
+ zend_unmangle_property_name_ex(ref->prop.name, &class_name, &prop_name, &prop_name_len);
+ member_p = zend_read_property(ref->ce, object, prop_name, prop_name_len, 1 TSRMLS_CC);
ZVAL_DUP(return_value, member_p);
}
}
}
} else {
const char *class_name, *prop_name;
+ size_t prop_name_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oz", &object, &value) == FAILURE) {
return;
}
- zend_unmangle_property_name(ref->prop.name->val, ref->prop.name->len, &class_name, &prop_name);
- zend_update_property(ref->ce, object, prop_name, strlen(prop_name), value TSRMLS_CC);
+
+ zend_unmangle_property_name_ex(ref->prop.name, &class_name, &prop_name, &prop_name_len);
+ zend_update_property(ref->ce, object, prop_name, prop_name_len, value TSRMLS_CC);
}
}
/* }}} */
zend_class_entry *tmp_ce, *ce;
zend_property_info *tmp_info;
const char *prop_name, *class_name;
- int prop_name_len;
+ size_t prop_name_len;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
GET_REFLECTION_OBJECT_PTR(ref);
- if (zend_unmangle_property_name(ref->prop.name->val, ref->prop.name->len, &class_name, &prop_name) != SUCCESS) {
+ if (zend_unmangle_property_name_ex(ref->prop.name, &class_name, &prop_name, &prop_name_len) != SUCCESS) {
RETURN_FALSE;
}
- prop_name_len = strlen(prop_name);
ce = tmp_ce = ref->ce;
while (tmp_ce && (tmp_info = zend_hash_str_find_ptr(&tmp_ce->properties_info, prop_name, prop_name_len)) != NULL) {
if (tmp_info->flags & ZEND_ACC_PRIVATE || tmp_info->flags & ZEND_ACC_SHADOW) {
if (Z_TYPE_P(data) == IS_OBJECT) {
const char *class_name;
- zend_unmangle_property_name(str_key->val, str_key->len, &class_name, &prop_name);
+ zend_unmangle_property_name(str_key, &class_name, &prop_name);
} else {
prop_name = str_key->val;
}
/* private or protected property access outside of the class */
continue;
}
- zend_unmangle_property_name_ex(key->val, key->len, &tmp, &prop_name, (int *)&prop_len);
+ zend_unmangle_property_name_ex(key, &tmp, &prop_name, &prop_len);
} else {
prop_name = key->val;
prop_len = key->len;
if (key == NULL) { /* numeric key */
php_printf("%*c[" ZEND_LONG_FMT "]=>\n", level + 1, ' ', index);
} else { /* string key */
- int unmangle = zend_unmangle_property_name(key->val, key->len, &class_name, &prop_name);
+ int unmangle = zend_unmangle_property_name(key, &class_name, &prop_name);
php_printf("%*c[", level + 1, ' ');
if (class_name && unmangle == SUCCESS) {
if (key == NULL) { /* numeric key */
php_printf("%*c[" ZEND_LONG_FMT "]=>\n", level + 1, ' ', index);
} else { /* string key */
- zend_unmangle_property_name(key->val, key->len, &class_name, &prop_name);
+ zend_unmangle_property_name(key, &class_name, &prop_name);
php_printf("%*c[", level + 1, ' ');
if (class_name) {
{
buffer_append_spaces(buf, level + 2);
if (key != NULL) {
- const char *class_name; /* ignored, but must be passed to unmangle */
- const char *pname;
+ const char *class_name, *prop_name;
+ size_t prop_name_len;
zend_string *pname_esc;
- zend_unmangle_property_name(key->val, key->len,
- &class_name, &pname);
- pname_esc = php_addcslashes(pname, strlen(pname), 0, "'\\", 2 TSRMLS_CC);
+ zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_name_len);
+ pname_esc = php_addcslashes(prop_name, prop_name_len, 0, "'\\", 2 TSRMLS_CC);
smart_str_appendc(buf, '\'');
smart_str_appendl(buf, pname_esc->val, pname_esc->len);
}
if (key) {
const char *class_name, *prop_name;
+ size_t prop_name_len;
zend_string *tmp;
- zend_unmangle_property_name(key->val, key->len, &class_name, &prop_name);
- tmp = zend_string_init(prop_name, strlen(prop_name), 0);
+ zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_name_len);
+ tmp = zend_string_init(prop_name, prop_name_len, 0);
php_wddx_serialize_var(packet, ent, tmp TSRMLS_CC);
zend_string_release(tmp);
} else {