summaryrefslogtreecommitdiff
path: root/Zend/zend_builtin_functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_builtin_functions.c')
-rw-r--r--Zend/zend_builtin_functions.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 8341bd7df3..a1a2797ca5 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -501,9 +501,16 @@ ZEND_FUNCTION(get_class)
RETURN_FALSE;
}
- if(Z_OBJ_HT_PP(arg)->get_class_name == NULL ||
+ if (Z_OBJ_HT_PP(arg)->get_class_name == NULL ||
Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_len, 0 TSRMLS_CC) != SUCCESS) {
- RETURN_FALSE;
+ zend_class_entry *ce, **_ce;
+
+ if (((_ce = zend_get_class_entry(*arg)) == NULL) || ((ce = *_ce) == NULL)) {
+ RETURN_FALSE;
+ }
+
+ name = ce->name;
+ name_len = ce->name_length;
}
RETURN_STRINGL(name, name_len, 1);
@@ -526,9 +533,16 @@ ZEND_FUNCTION(get_parent_class)
char *name;
zend_uint name_length;
- if(Z_OBJ_HT_PP(arg)->get_class_name == NULL ||
+ if (Z_OBJ_HT_PP(arg)->get_class_name == NULL ||
Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_length, 1 TSRMLS_CC) != SUCCESS) {
- RETURN_FALSE;
+ zend_class_entry *ce, **_ce;
+
+ if (!(_ce = zend_get_class_entry(*arg)) || !(ce = *_ce) || !(ce = ce->parent)) {
+ RETURN_FALSE;
+ }
+
+ name = ce->name;
+ name_length = ce->name_length;
}
RETURN_STRINGL(name, name_length, 1);
} else if (Z_TYPE_PP(arg) == IS_STRING) {