]> granicus.if.org Git - php/commitdiff
fix bug #45712 ($something == NaN returns true with 5.3, false with 5.2.*)
authorAntony Dovgal <tony2001@php.net>
Thu, 7 Aug 2008 08:36:15 +0000 (08:36 +0000)
committerAntony Dovgal <tony2001@php.net>
Thu, 7 Aug 2008 08:36:15 +0000 (08:36 +0000)
Zend/zend_operators.c
ext/standard/tests/math/bug45712.phpt

index c40549a83b04238d697071b14fee14114a929837..7fef7877150efdffaae27a39c8cf03f518fd4841 100644 (file)
@@ -1975,15 +1975,18 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {
                                return SUCCESS;
 
                        case TYPE_PAIR(IS_DOUBLE, IS_LONG):
-                               ZVAL_LONG(result, Z_DVAL_P(op1)>((double)Z_LVAL_P(op2))?1:(Z_DVAL_P(op1)<((double)Z_LVAL_P(op2))?-1:0));
+                               Z_DVAL_P(result) = Z_DVAL_P(op1) - (double)Z_LVAL_P(op2);
+                               ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_DVAL_P(result)));
                                return SUCCESS;
 
                        case TYPE_PAIR(IS_LONG, IS_DOUBLE):
-                               ZVAL_LONG(result, ((double)Z_LVAL_P(op1))>Z_DVAL_P(op2)?1:(((double)Z_LVAL_P(op1))<Z_DVAL_P(op2)?-1:0));
+                               Z_DVAL_P(result) = (double)Z_LVAL_P(op1) - Z_DVAL_P(op2);
+                               ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_DVAL_P(result)));
                                return SUCCESS;
 
                        case TYPE_PAIR(IS_DOUBLE, IS_DOUBLE):
-                               ZVAL_LONG(result, Z_DVAL_P(op1)>Z_DVAL_P(op2)?1:(Z_DVAL_P(op1)<Z_DVAL_P(op2)?-1:0));
+                               Z_DVAL_P(result) = Z_DVAL_P(op1) - Z_DVAL_P(op2);
+                               ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_DVAL_P(result)));
                                return SUCCESS;
 
                        case TYPE_PAIR(IS_ARRAY, IS_ARRAY):
index d5feb57c58c5f5d356e5370e8539091c03fbac2b..3ebc94c92e79cc84c638f2f71a7d8aa640340d0d 100644 (file)
@@ -50,13 +50,13 @@ bool(false)
 bool(false)
 bool(false)
 bool(false)
-bool(true)
 bool(false)
 bool(false)
 bool(false)
 bool(false)
 bool(false)
-bool(true)
+bool(false)
+bool(false)
 float(INF)
 bool(true)
 bool(false)
@@ -64,7 +64,7 @@ bool(false)
 bool(false)
 bool(false)
 bool(false)
-bool(true)
+bool(false)
 bool(false)
 bool(false)
 bool(false)