]> granicus.if.org Git - php/commitdiff
Fix handling of ::func()
authorZeev Suraski <zeev@php.net>
Tue, 11 Mar 2003 23:19:45 +0000 (23:19 +0000)
committerZeev Suraski <zeev@php.net>
Tue, 11 Mar 2003 23:19:45 +0000 (23:19 +0000)
Zend/zend_execute.c
Zend/zend_object_handlers.c

index ffa61307d57ab793c8baeaeb7ccb6d6a852c1268..6043f9e2e395cd612e8bfdf2378035c12d664511 100644 (file)
@@ -2521,7 +2521,11 @@ int zend_init_static_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
                function_name_strlen = tmp.value.str.len;
        }
 
-       ce = EX_T(EX(opline)->op1.u.var).EA.class_entry;
+       if (EX(opline)->op1.op_type == IS_UNUSED) {
+               ce = EG(global_namespace_ptr);
+       } else {
+               ce = EX_T(EX(opline)->op1.u.var).EA.class_entry;
+       }
 
        EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
        EX(calling_scope) = EX(fbc)->common.scope;
index aa3e75d1c8b5a1ebbacc8592c003397bb46d2b0c..7db7124ea3623dda05ab3e929a445a82f4897295 100644 (file)
@@ -597,7 +597,12 @@ zend_function *zend_std_get_static_method(zend_class_entry *ce, char *function_n
        zend_function *fbc;
 
        if (zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void **) &fbc)==FAILURE) {
-               zend_error(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
+               char *class_name = ce->name;
+
+               if (!class_name) {
+                       class_name = "";
+               }
+               zend_error(E_ERROR, "Call to undefined method %s::%s()", class_name, function_name_strval);
        }
        if (fbc->op_array.fn_flags & ZEND_ACC_PUBLIC) {
                /* No further checks necessary, most common case */