]> granicus.if.org Git - php/commitdiff
fix double->long conversion
authorStanislav Malyshev <stas@php.net>
Wed, 18 Jul 2001 16:46:51 +0000 (16:46 +0000)
committerStanislav Malyshev <stas@php.net>
Wed, 18 Jul 2001 16:46:51 +0000 (16:46 +0000)
Zend/zend_operators.c

index 32584ed23f9dc3c55bf02b8195ac903b3013e598..5574748125c00ba73fd0e387e4225f16e4428fe9 100644 (file)
@@ -182,6 +182,7 @@ ZEND_API void convert_scalar_to_number(zval *op)
        }
 
 
+#define DVAL_TO_LVAL(d, l) (l) = (d) > LONG_MAX ? (unsigned long) (d) : (long) (d)
 
 #define zendi_convert_to_long(op, holder, result)                                      \
        if (op==result) {                                                                                               \
@@ -192,7 +193,7 @@ ZEND_API void convert_scalar_to_number(zval *op)
                                (holder).value.lval = 0;                                                        \
                                break;                                                                                          \
                        case IS_DOUBLE:                                                                                 \
-                               (holder).value.lval = (long) (op)->value.dval;          \
+                               DVAL_TO_LVAL((op)->value.dval, (holder).value.lval);    \
                                break;                                                                                          \
                        case IS_STRING:                                                                                 \
                                (holder).value.lval = strtol((op)->value.str.val, NULL, 10);                                    \
@@ -277,7 +278,7 @@ ZEND_API void convert_to_long_base(zval *op, int base)
                case IS_LONG:
                        break;
                case IS_DOUBLE:
-                       op->value.lval = (long) op->value.dval;
+                       DVAL_TO_LVAL(op->value.dval, op->value.lval);
                        break;
                case IS_STRING:
                        strval = op->value.str.val;