]> granicus.if.org Git - php/commitdiff
IS_OBJECT and IS_RESOURCE is obviously exclusive
authorXinchen Hui <laruence@php.net>
Thu, 26 Jun 2014 10:29:25 +0000 (18:29 +0800)
committerXinchen Hui <laruence@php.net>
Thu, 26 Jun 2014 10:29:25 +0000 (18:29 +0800)
ext/standard/type.c

index a42dd0bd0bb68ab7669e4121efe8c2c9589fc469..72f1660932ea679aae48eb5c74771da696103aab 100644 (file)
@@ -218,16 +218,16 @@ static void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type)
        if (Z_TYPE_P(arg) == type) {
                if (type == IS_OBJECT) {
                        zend_class_entry *ce;
-                       if(Z_OBJ_HT_P(arg)->get_class_entry == NULL) {
-                       /* if there's no get_class_entry it's not a PHP object, so it can't be INCOMPLETE_CLASS */
+                       if (Z_OBJ_HT_P(arg)->get_class_entry == NULL) {
+                               /* if there's no get_class_entry it's not a PHP object, so it can't be INCOMPLETE_CLASS */
                                RETURN_TRUE;
                        }
                        ce = Z_OBJCE_P(arg);
-                       if (!strcmp(ce->name->val, INCOMPLETE_CLASS)) {
+                       if (ce->name->len == sizeof(INCOMPLETE_CLASS) - 1 
+                                       && !strncmp(ce->name->val, INCOMPLETE_CLASS, ce->name->len)) {
                                RETURN_FALSE;
                        }
-               }
-               if (type == IS_RESOURCE) {
+               } else if (type == IS_RESOURCE) {
                        const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(arg) TSRMLS_CC);
                        if (!type_name) {
                                RETURN_FALSE;