]> granicus.if.org Git - php/commitdiff
("0" == NULL) must be false even in Unicode mode
authorAntony Dovgal <tony2001@php.net>
Fri, 13 Jul 2007 17:07:02 +0000 (17:07 +0000)
committerAntony Dovgal <tony2001@php.net>
Fri, 13 Jul 2007 17:07:02 +0000 (17:07 +0000)
Zend/zend_operators.c

index 7b7960748c5dfb2eb8020dbe70ee8b155f30b2ba..86614c43625f82f30431c4ad30b45a0e883266d7 100644 (file)
@@ -1941,6 +1941,21 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {
                }
        }
 
+       if ((Z_TYPE_P(op1) == IS_NULL && Z_TYPE_P(op2) == IS_UNICODE)
+               || (Z_TYPE_P(op2) == IS_NULL && Z_TYPE_P(op1) == IS_UNICODE)) {
+               UChar *empty_str = USTR_MAKE("");
+
+               if (Z_TYPE_P(op1) == IS_NULL) {
+                       ZVAL_LONG(result, zend_u_binary_strcmp(empty_str, 0, Z_USTRVAL_P(op2), Z_USTRLEN_P(op2)));
+                       efree(empty_str);
+                       COMPARE_RETURN_AND_FREE(SUCCESS);
+               } else {
+                       ZVAL_LONG(result, zend_u_binary_strcmp(Z_USTRVAL_P(op1), Z_USTRLEN_P(op1), empty_str, 0));
+                       efree(empty_str);
+                       COMPARE_RETURN_AND_FREE(SUCCESS);
+               }
+       }
+
        if ((Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op1) == IS_STRING) &&
            (Z_TYPE_P(op2) == IS_UNICODE || Z_TYPE_P(op2) == IS_STRING)) {