]> granicus.if.org Git - php/commitdiff
- Fix crash in reflection API (pierre)
authorAndi Gutmans <andi@php.net>
Mon, 1 Mar 2004 15:19:38 +0000 (15:19 +0000)
committerAndi Gutmans <andi@php.net>
Mon, 1 Mar 2004 15:19:38 +0000 (15:19 +0000)
Zend/zend_reflection_api.c
ext/reflection/php_reflection.c

index c71044df042adfec525b6511debf443b57464cb0..4b5c9b4167a366b1ff3b6fb22fd1bc16938fa456 100644 (file)
@@ -1612,15 +1612,19 @@ ZEND_METHOD(reflection_method, invoke)
                object_pp = NULL;
                obj_ce = NULL;
        } else {
-               obj_ce = Z_OBJCE_PP(params[0]);
-               if ((Z_TYPE_PP(params[0]) != IS_OBJECT)
-                       || (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC))) {
+               if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) {
                        efree(params);
 
+                       _DO_THROW("Non-object passed to Invoke()");
+                       /* Returns from this function */
+               }
+               obj_ce = Z_OBJCE_PP(params[0]);
+
+               if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) {
                        _DO_THROW("Given object is not an instance of the class this method was declared in");
                        /* Returns from this function */
                }
-               
+       
                object_pp = params[0];
        }
        
index c71044df042adfec525b6511debf443b57464cb0..4b5c9b4167a366b1ff3b6fb22fd1bc16938fa456 100644 (file)
@@ -1612,15 +1612,19 @@ ZEND_METHOD(reflection_method, invoke)
                object_pp = NULL;
                obj_ce = NULL;
        } else {
-               obj_ce = Z_OBJCE_PP(params[0]);
-               if ((Z_TYPE_PP(params[0]) != IS_OBJECT)
-                       || (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC))) {
+               if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) {
                        efree(params);
 
+                       _DO_THROW("Non-object passed to Invoke()");
+                       /* Returns from this function */
+               }
+               obj_ce = Z_OBJCE_PP(params[0]);
+
+               if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) {
                        _DO_THROW("Given object is not an instance of the class this method was declared in");
                        /* Returns from this function */
                }
-               
+       
                object_pp = params[0];
        }