-
-#define ASSOC_PROP(array, ptype, name, val) \
- { \
- char *m_prop_name; \
- int m_prop_len; \
- zend_mangle_property_name(&m_prop_name, &m_prop_len, "*", 1, name, lenof(name), 0); \
- add_assoc_ ##ptype## _ex(&array, m_prop_name, sizeof(name)+3, val); \
- efree(m_prop_name); \
- }
-#define ASSOC_STRING(array, name, val) ASSOC_STRINGL(array, name, val, strlen(val))
-#define ASSOC_STRINGL(array, name, val, len) ASSOC_STRINGL_EX(array, name, val, len, 1)
-#define ASSOC_STRINGL_EX(array, name, val, len, cpy) \
- { \
- char *m_prop_name; \
- int m_prop_len; \
- zend_mangle_property_name(&m_prop_name, &m_prop_len, "*", 1, name, lenof(name), 0); \
- add_assoc_stringl_ex(&array, m_prop_name, sizeof(name)+3, val, len, cpy); \
- efree(m_prop_name); \
- }
-
- ASSOC_PROP(array, long, "type", msg->type);
- ASSOC_STRINGL_EX(array, "httpVersion", version, spprintf(&version, 0, "%u.%u", msg->http.version.major, msg->http.version.minor), 0);
+
+#define ASSOC_PROP(ptype, n, val) \
+ do { \
+ zend_property_info *pi; \
+ if (SUCCESS == zend_hash_find(&obj->zo.ce->properties_info, n, sizeof(n), (void *) &pi)) { \
+ add_assoc_ ##ptype## _ex(&array, pi->name, pi->name_length + 1, val); \
+ } \
+ } while(0) \
+
+#define ASSOC_STRING(name, val) ASSOC_STRINGL(name, val, strlen(val))
+#define ASSOC_STRINGL(name, val, len) ASSOC_STRINGL_EX(name, val, len, 1)
+#define ASSOC_STRINGL_EX(n, val, len, cpy) \
+ do { \
+ zend_property_info *pi; \
+ if (SUCCESS == zend_hash_find(&obj->zo.ce->properties_info, n, sizeof(n), (void *) &pi)) { \
+ add_assoc_stringl_ex(&array, pi->name, pi->name_length + 1, val, len, cpy); \
+ } \
+ } while(0)
+
+ ASSOC_PROP(long, "type", msg->type);
+ ASSOC_STRINGL_EX("httpVersion", version, spprintf(&version, 0, "%u.%u", msg->http.version.major, msg->http.version.minor), 0);