All pastes #766125 Raw Edit

Miscellany

public text v1 · immutable
#766125 ·published 2007-11-08 17:08 UTC
rendered paste body
#P php53_dev
Index: Zend/zend_operators.c
===================================================================
RCS file: /repository/ZendEngine2/zend_operators.c,v
retrieving revision 1.208.2.4.2.23.2.2
diff -u -r1.208.2.4.2.23.2.2 zend_operators.c
--- Zend/zend_operators.c	29 Oct 2007 14:36:55 -0000	1.208.2.4.2.23.2.2
+++ Zend/zend_operators.c	8 Nov 2007 10:09:10 -0000
@@ -185,21 +185,37 @@
 				break;														\
 		}																	\
 	}
-
+#define MAX_UNSIGNED_INT ((double) LONG_MAX * 2) + 1
 #ifdef _WIN64
 # define DVAL_TO_LVAL(d, l) \
 	if ((d) > LONG_MAX) { \
-		(l) = (long)(unsigned long)(__int64) (d); \
+                if ((d) > MAX_UNSIGNED_INT) { \
+                        (l) = LONG_MAX; \
+                } else { \
+			(l) = (long)(unsigned long)(__int64) (d); \
+		} \
 	} else { \
-		(l) = (long) (d); \
+                if((d) < LONG_MIN) { \
+                        (l) = LONG_MIN; \
+                } else { \
+                        (l) = (long) (d); \
+                } \
 	}
 #else
 # define DVAL_TO_LVAL(d, l) \
-	if ((d) > LONG_MAX) { \
-		(l) = (unsigned long) (d); \
-	} else { \
-		(l) = (long) (d); \
-	}
+        if ((d) > LONG_MAX) { \
+                if ((d) > MAX_UNSIGNED_INT) { \
+                        (l) = LONG_MAX; \
+                } else { \
+                        (l) = (unsigned long) (d); \
+                } \
+        } else { \
+                if((d) < LONG_MIN) { \
+                        (l) = LONG_MIN; \
+                } else { \
+                        (l) = (long) (d); \
+                } \
+        }
 #endif
 
 #define zendi_convert_to_long(op, holder, result)					\