]> granicus.if.org Git - php/commitdiff
Revert fix for #24729, and refix
authorZeev Suraski <zeev@php.net>
Mon, 21 Jul 2003 07:42:15 +0000 (07:42 +0000)
committerZeev Suraski <zeev@php.net>
Mon, 21 Jul 2003 07:42:15 +0000 (07:42 +0000)
Zend/zend_execute.c

index ec52b51b60b9630687dc56b6dfdc4af3cbdf79cc..42c6055de86def75efc1e66a0166e0ff25264bdd 100644 (file)
@@ -2378,22 +2378,29 @@ int zend_fetch_class_handler(ZEND_OPCODE_HANDLER_ARGS)
        } else {
                class_name = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
 
-               if (class_name->type == IS_OBJECT) {
-                       ce = Z_OBJCE_P(class_name);
-               } else if (class_name->value.str.val && class_name->value.str.len) {
-                       class_name_strval = zend_str_tolower_dup(class_name->value.str.val, class_name->value.str.len);
-                       class_name_strlen = class_name->value.str.len;
-                       free_class_name = 1;
-               } else {
-                       class_name_strlen = 0;
+               switch (class_name->type) {
+                       case IS_OBJECT:
+                               ce = Z_OBJCE_P(class_name);
+                               break;
+                       case IS_STRING:
+                               class_name_strval = zend_str_tolower_dup(class_name->value.str.val, class_name->value.str.len);
+                               class_name_strlen = class_name->value.str.len;
+                               free_class_name = 1;
+                               break;
+                       default:
+                               zend_error(E_ERROR, "Class name must be a valid object or a string");
+                               break;
                }
        }
        
        if (!ce) {
-               if (EX(opline)->op1.op_type == IS_UNUSED && class_name_strlen) {
-                       if (zend_lookup_class(class_name_strval, class_name_strlen, &pce TSRMLS_CC) == SUCCESS) {
-                               ce = *pce;
-                       }
+               int retval;
+
+               if (EX(opline)->op1.op_type == IS_UNUSED) {
+                       retval = zend_lookup_class(class_name_strval, class_name_strlen, &pce TSRMLS_CC);
+               }
+               if (retval==SUCCESS) {
+                       ce = *pce;
                }
        }