]> granicus.if.org Git - php/commitdiff
Additional fix for bug #42868
authorDmitry Stogov <dmitry@php.net>
Mon, 24 Dec 2007 18:10:20 +0000 (18:10 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 24 Dec 2007 18:10:20 +0000 (18:10 +0000)
Zend/tests/int_overflow_64bit.phpt
Zend/zend_operators.c
ext/standard/string.c
ext/standard/tests/strings/chunk_split_error.phpt
ext/standard/tests/strings/chunk_split_variation5.phpt
ext/standard/tests/strings/chunk_split_variation8.phpt
ext/standard/tests/strings/htmlspecialchars_decode_variation2.phpt

index 306fbae602ee86b184ca36f68381405f411dc4f0..769b17926e92490bf2fa7ced1490f79fffcf13ea 100644 (file)
@@ -6,11 +6,13 @@ testing integer overflow (64bit)
 <?php
 
 $doubles = array(
-        9223372036854775808,
-        9223372036854775809,
-        9223372036854775818,
-        9223372036854775908,
-        9223372036854776808,
+        PHP_INT_MAX,
+        PHP_INT_MAX + 1,
+        PHP_INT_MAX + 1000,
+        PHP_INT_MAX * 2 + 4,
+        -PHP_INT_MAX -1,
+        -PHP_INT_MAX -2,
+        -PHP_INT_MAX -1000,
         );
 
 foreach ($doubles as $d) {
@@ -21,8 +23,10 @@ foreach ($doubles as $d) {
 echo "Done\n";
 ?>
 --EXPECTF--
-int(-9223372036854775808)
-int(-9223372036854775808)
+int(9223372036854775807)
+int(9223372036854775807)
+int(9223372036854775807)
+int(9223372036854775807)
 int(-9223372036854775808)
 int(-9223372036854775808)
 int(-9223372036854775808)
index 6f22c20165365b819e04819e882686922e47e9c2..3eff4f2b2dc70ee1b106a167ed4ac22d70bb96f5 100644 (file)
@@ -243,34 +243,35 @@ ZEND_API int convert_scalar_to_number(zval *op TSRMLS_DC) /* {{{ */
 #define MAX_UNSIGNED_INT ((double) LONG_MAX * 2) + 1
 #ifdef _WIN64
 # define DVAL_TO_LVAL(d, l) \
-        if ((d) > LONG_MAX) { \
-                if ((d) > MAX_UNSIGNED_INT) { \
-                        (l) = LONG_MAX; \
-                } else { \
-                        (l) = (long)(unsigned long)(__int64) (d); \
-                } \
-        } else { \
-                if((d) < LONG_MIN) { \
-                        (l) = LONG_MIN; \
-                } else { \
-                        (l) = (long) (d); \
-                } \
-        }
+       if ((d) > LONG_MAX) { \
+               (l) = (long)(unsigned long)(__int64) (d); \
+       } else { \
+               (l) = (long) (d); \
+       }
+#elif !defined(_WIN64) && __WORDSIZE == 64
+# define DVAL_TO_LVAL(d, l) \
+       if ((d) >= LONG_MAX) { \
+               (l) = LONG_MAX; \
+       } else if ((d) <=  LONG_MIN) { \
+               (l) = LONG_MIN; \
+       } else {\
+               (l) = (long) (d); \
+       }
 #else
 # define DVAL_TO_LVAL(d, l) \
-        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); \
-                } \
-        }
+       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
 /* }}} */
 
index 78efe3f18b479db0e1fe694e1e6f54a489025828..6074a59a328d622f7292776f68700c37a4c10226 100644 (file)
@@ -3339,7 +3339,7 @@ PHP_FUNCTION(chunk_split)
        zstr result;
        char *end    = "\r\n";
        UChar u_end[3] = { 0x0d, 0x0a, 0x0 };
-       int chunklen = 76;
+       long chunklen = 76;
        int result_len;
        zend_uchar str_type;
 
index 9a0819c73243038c7926cdddf193d5832ba5dd07..9313b65b5b8caf842b542b26999e352a79aec42f 100644 (file)
@@ -19,7 +19,7 @@ echo "*** Testing chunk_split() : error conditions ***\n";
 echo "-- Testing chunk_split() function with Zero arguments --";
 var_dump( chunk_split() );
 
-//Test chunk_split with one more than the expected number of arguments
+// With one more than the expected number of arguments
 $str = 'Testing chunk_split';
 $chunklen = 5;
 $ending = '***';
@@ -38,12 +38,3 @@ NULL
 Warning: chunk_split() expects at most 3 parameters, 4 given in %s on line %d
 NULL
 Done
---UEXPECTF--
-*** Testing chunk_split() : error conditions ***
--- Testing chunk_split() function with Zero arguments --
-Warning: chunk_split() expects at least 1 parameter, 0 given in %s on line %d
-NULL
--- Testing chunk_split() function with more than expected no. of arguments --
-Warning: chunk_split() expects at most 3 parameters, 4 given in %s on line %d
-NULL
-Done
index 170f9e136403a7ea51c587c46ac970ec090bea45..f8e84a9ca4766124d3fa8a34d37c804bde509484 100644 (file)
Binary files a/ext/standard/tests/strings/chunk_split_variation5.phpt and b/ext/standard/tests/strings/chunk_split_variation5.phpt differ
index c3ceeceb4c64ce03e3290680e32bc8912796ee6a..2d82c4945c67b4f94b94748b4c4911d0fe39f6f9 100644 (file)
@@ -1,5 +1,5 @@
 --TEST--
-Test chunk_split() function : usage variations - different integer values for 'chunklen' with heredoc string as 'str'
+Test chunk_split() function : usage variations - different integer values for 'chunklen' with heredoc string as 'str'(Bug#42796)
 --FILE--
 <?php
 /* Prototype  : string chunk_split(string $str [, int $chunklen [, string $ending]])
@@ -32,9 +32,9 @@ $values = array (
   -123,  //negative integer
   0234,  //octal number
   0x1A,  //hexadecimal number
-  2147483647,  //max positive integer number
-  2147483648,  //max positive integer+1
-  -2147483648,  //min negative integer
+  PHP_INT_MAX,  //max positive integer number
+  PHP_INT_MAX * 3,  // Will overflow 32 bits on 32 bt system and 64 bits on 64 bit system
+  -PHP_INT_MAX -1,  //min negative integer
 
 );
 
@@ -51,7 +51,7 @@ echo "Done"
 *** Testing chunk_split() : different 'chunklen' with heredoc 'str' ***
 -- Iteration 1 --
 
-Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d%d
+Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d
 bool(false)
 -- Iteration 2 --
 string(504) "T:::h:::i:::s:::':::s::: :::h:::e:::r:::e:::d:::o:::c::: :::s:::t:::r:::i:::n:::g::: :::w:::i:::t:::h::: :::      ::: :::a:::n:::d::: :::
@@ -60,7 +60,7 @@ string(504) "T:::h:::i:::s:::':::s::: :::h:::e:::r:::e:::d:::o:::c::: :::s:::t::
 :::c:::h:::u:::n:::k:::_:::s:::p:::l:::i:::t:::(:::):::"
 -- Iteration 3 --
 
-Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d%d
+Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d
 bool(false)
 -- Iteration 4 --
 string(129) "This's heredoc string with         and 
@@ -78,15 +78,15 @@ string(129) "This's heredoc string with      and
 It has _speci@l ch@r$ 2222 !!!Now \k as escape char to test
 chunk_split():::"
 -- Iteration 7 --
-
-Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d%d
-bool(false)
+string(129) "This's heredoc string with         and 
+ white space char.
+It has _speci@l ch@r$ 2222 !!!Now \k as escape char to test
+chunk_split():::"
 -- Iteration 8 --
 
-Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d%d
+Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d
 bool(false)
 Done
-
 --UEXPECTF--
 *** Testing chunk_split() : different 'chunklen' with heredoc 'str' ***
 -- Iteration 1 --
@@ -118,11 +118,13 @@ unicode(129) "This's heredoc string with   and
 It has _speci@l ch@r$ 2222 !!!Now \k as escape char to test
 chunk_split():::"
 -- Iteration 7 --
-
-Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d
-bool(false)
+unicode(129) "This's heredoc string with        and 
+ white space char.
+It has _speci@l ch@r$ 2222 !!!Now \k as escape char to test
+chunk_split():::"
 -- Iteration 8 --
 
 Warning: chunk_split(): Chunk length should be greater than zero in %s on line %d
 bool(false)
 Done
+
index 052f9a8a590bdfa62c800e007353840fc679f0e0..dd731faba2e7b714edc658829e27c85ff7fb8a7e 100644 (file)
@@ -37,7 +37,7 @@ $values = array(
       // float data
       10.5,
       -10.5,
-      10.5e10,
+      10.5e20,
       10.6E-10,
       .5,
 
@@ -209,27 +209,27 @@ unicode(114) "<html>Roy&#039;s height > Sam&#039;s height. 13 < 15. 1111 & 0000
 
 -- Iteration 6 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %s on line %d
 NULL
 
 -- Iteration 7 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %s on line %d
 NULL
 
 -- Iteration 8 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %s on line %d
 NULL
 
 -- Iteration 9 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %s on line %d
 NULL
 
 -- Iteration 10 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, array given in %s on line %d
 NULL
 
 -- Iteration 11 --
@@ -252,27 +252,27 @@ unicode(114) "<html>Roy&#039;s height > Sam&#039;s height. 13 < 15. 1111 & 0000
 
 -- Iteration 17 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %s on line %d
 NULL
 
 -- Iteration 18 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %s on line %d
 NULL
 
 -- Iteration 19 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %s on line %d
 NULL
 
 -- Iteration 20 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, Unicode string given in %s on line %d
 NULL
 
 -- Iteration 21 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, object given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, object given in %s on line %d
 NULL
 
 -- Iteration 22 --
@@ -283,7 +283,6 @@ unicode(114) "<html>Roy&#039;s height > Sam&#039;s height. 13 < 15. 1111 & 0000
 
 -- Iteration 24 --
 
-Warning: htmlspecialchars_decode() expects parameter 2 to be long, resource given in %shtmlspecialchars_decode_variation2.php on line %d
+Warning: htmlspecialchars_decode() expects parameter 2 to be long, resource given in %s on line %d
 NULL
 Done
-