ID: 21182 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Open +Status: Critical Bug Type: Arrays related Operating System: FreeBSD -PHP Version: 4.2.1 +PHP Version: 4.3.0-dev New Comment:
Confirmed in 4.3.0. If they are strings, $a turns into 40! If $a is integer, it stays 20 as expected. Btw if we have '$a = "$a = "24"; $b = "140";' then $a turns into 04. There seems to be sort of a pattern but it's kinda weird :) The second argument ($b) does not get modified and the following behavoir exists: range(20, "30"); // okay in 4.3.0-dev range("20", "30"); // not okay in 4.3.0-dev And as a holiday bonus, in HEAD either use results in a segfault with the following backtrace for CLI: rock:/tmp# php range.php a1: 20 FATAL: erealloc(): Unable to allocate 1515870815 bytes Segmentation fault (core dumped) #0 0x400b9c51 in kill () from /lib/libc.so.6 #1 0x0815f28c in _erealloc (ptr=0x8360cdc, size=1515870815, allow_failure=0, __zend_filename=0x81b8100 "/cvs/php4/Zend/zend_operators.c", __zend_lineno=1013, __zend_orig_filename=0x0, __zend_orig_lineno=0) at /cvs/php4/Zend/zend_alloc.c:298 #2 0x0816fb47 in add_string_to_string (result=0xbfffd5f4, op1=0xbfffd5f4, op2=0xbfffd748) at /cvs/php4/Zend/zend_operators.c:1013 #3 0x0818766b in execute (op_array=0x83677c4) at /cvs/php4/Zend/zend_execute.c:1463 #4 0x08174924 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /cvs/php4/Zend/zend.c:931 #5 0x08139553 in php_execute_script (primary_file=0xbffffa2c) at /cvs/php4/main/main.c:1693 #6 0x0818e817 in main (argc=2, argv=0xbffffaa4) at /cvs/php4/sapi/cli/php_cli.c:744 range.php looks like this: <?php $a = "20"; $b = "30"; echo "a1: $a\n"; $result = range($a, $b); echo "a2: $a : type : " . gettype($a) . "\n"; ?> Previous Comments: ------------------------------------------------------------------------ [2002-12-25 10:43:54] [EMAIL PROTECTED] I searched range's source (php4/ext/standard/array.c) It seems that problem is in string for (; *low <= *high; (*low) += (unsigned int)lstep) { add_next_index_stringl(return_value, low, 1, 1); } += increments not pointer, but value, to which low points. Therefore for(;;) iterates values between first characters of high and low strings. ------------------------------------------------------------------------ [2002-12-25 10:02:09] [EMAIL PROTECTED] I have the following code: <?PHP $a = "20"; $b = "30"; $result = range($a, $b); echo $a; ?> For some reason it display "40". I know that I have to write $result = range((int)$a, (int)$b); But why range() change value of argument? ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=21182&edit=1