From: Jani Taskinen Date: Tue, 11 Dec 2007 09:47:21 +0000 (+0000) Subject: MFH: - Fixed bug #43541 X-Git-Tag: RELEASE_1_3_1~527 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a4de086cbc6bd19bc9fb99810c232ac98d3e078;p=php MFH: - Fixed bug #43541 --- diff --git a/ext/standard/array.c b/ext/standard/array.c index e82dd6bbb0..6868c353e2 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2101,17 +2101,16 @@ PHP_FUNCTION(array_slice) zval *input, /* Input array */ **entry; /* An array entry */ long offset, /* Offset to get elements from */ - length; /* How many elements to get */ + length = 0; /* How many elements to get */ zend_bool preserve_keys = 0; /* Whether to preserve keys while copying to the new array or not */ int num_in, /* Number of elements in the input array */ pos; /* Current position in the array */ - zval *length_param; char *string_key; uint string_key_len; ulong num_key; HashPosition hpos; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|zb", &input, &offset, &length_param, &preserve_keys) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|lb", &input, &offset, &length, &preserve_keys) == FAILURE) { return; } @@ -2119,12 +2118,10 @@ PHP_FUNCTION(array_slice) num_in = zend_hash_num_elements(Z_ARRVAL_P(input)); /* We want all entries from offset to the end if length is not passed or is null */ - if (ZEND_NUM_ARGS() >= 3 && Z_TYPE_P(length_param) != IS_NULL) { - length = Z_LVAL_P(length_param); - } else { + if (length == 0) { length = num_in; } - + /* Initialize returned array */ array_init(return_value); diff --git a/ext/standard/tests/array/array_slice.phpt b/ext/standard/tests/array/array_slice.phpt index c8b9c9351b..b8e8026d4c 100644 --- a/ext/standard/tests/array/array_slice.phpt +++ b/ext/standard/tests/array/array_slice.phpt @@ -1,7 +1,6 @@ --TEST-- Testing array_slice() function --FILE-- - - --EXPECTF-- *** Output for Zero Argument *** -Warning: array_slice() expects at least %d parameters, %d given in %s on line %d +Warning: array_slice() expects at least 2 parameters, 0 given in %s on line %d *** Output for Single array Argument *** -Warning: array_slice() expects at least %d parameters, %d given in %s on line %d +Warning: array_slice() expects at least 2 parameters, 1 given in %s on line %d *** Output for invalid number of Arguments *** -Warning: array_slice() expects at most %d parameters, %d given in %s on line %d +Warning: array_slice() expects at most 4 parameters, 5 given in %s on line %d *** Output for scalar Argument *** -Warning: array_slice() expects parameter %d to be array, integer given in %s on line %d +Warning: array_slice() expects parameter 1 to be array, integer given in %s on line %d *** Output for string Argument *** -Warning: array_slice() expects parameter %d to be array, string given in %s on line %d%d +Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d *** Iteration 1 *** @@ -218,7 +216,23 @@ array(3) { [2]=> int(4) } -array(0) { +array(8) { + [0]=> + int(2) + [1]=> + int(3) + [2]=> + int(4) + [3]=> + int(5) + [4]=> + int(6) + [5]=> + int(7) + [6]=> + int(8) + [7]=> + int(9) } array(5) { [0]=> @@ -240,7 +254,25 @@ array(3) { [2]=> int(3) } -array(0) { +array(9) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + [3]=> + int(4) + [4]=> + int(5) + [5]=> + int(6) + [6]=> + int(7) + [7]=> + int(8) + [8]=> + int(9) } array(6) { [0]=> @@ -262,7 +294,11 @@ array(2) { [1]=> int(9) } -array(0) { +array(2) { + [0]=> + int(8) + [1]=> + int(9) } array(0) { } @@ -276,7 +312,23 @@ array(3) { [3]=> int(4) } -array(0) { +array(8) { + [1]=> + int(2) + [2]=> + int(3) + [3]=> + int(4) + [4]=> + int(5) + [5]=> + int(6) + [6]=> + int(7) + [7]=> + int(8) + [8]=> + int(9) } array(5) { [1]=> @@ -298,7 +350,25 @@ array(3) { [2]=> int(3) } -array(0) { +array(9) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + [3]=> + int(4) + [4]=> + int(5) + [5]=> + int(6) + [6]=> + int(7) + [7]=> + int(8) + [8]=> + int(9) } array(6) { [0]=> @@ -320,7 +390,11 @@ array(2) { [8]=> int(9) } -array(0) { +array(2) { + [7]=> + int(8) + [8]=> + int(9) } array(0) { } @@ -366,7 +440,15 @@ array(3) { [2]=> string(4) "Four" } -array(0) { +array(4) { + [0]=> + string(3) "Two" + [1]=> + string(5) "Three" + [2]=> + string(4) "Four" + [3]=> + string(4) "Five" } array(1) { [0]=> @@ -380,7 +462,17 @@ array(3) { [2]=> string(5) "Three" } -array(0) { +array(5) { + [0]=> + string(3) "One" + [1]=> + string(3) "Two" + [2]=> + string(5) "Three" + [3]=> + string(4) "Four" + [4]=> + string(4) "Five" } array(2) { [0]=> @@ -394,7 +486,11 @@ array(2) { [1]=> string(4) "Five" } -array(0) { +array(2) { + [0]=> + string(4) "Four" + [1]=> + string(4) "Five" } array(0) { } @@ -408,7 +504,15 @@ array(3) { [3]=> string(4) "Four" } -array(0) { +array(4) { + [1]=> + string(3) "Two" + [2]=> + string(5) "Three" + [3]=> + string(4) "Four" + [4]=> + string(4) "Five" } array(1) { [1]=> @@ -422,7 +526,17 @@ array(3) { [2]=> string(5) "Three" } -array(0) { +array(5) { + [0]=> + string(3) "One" + [1]=> + string(3) "Two" + [2]=> + string(5) "Three" + [3]=> + string(4) "Four" + [4]=> + string(4) "Five" } array(2) { [0]=> @@ -436,7 +550,11 @@ array(2) { [4]=> string(4) "Five" } -array(0) { +array(2) { + [3]=> + string(4) "Four" + [4]=> + string(4) "Five" } array(0) { } @@ -494,7 +612,21 @@ array(3) { [2]=> string(5) "seven" } -array(0) { +array(7) { + [0]=> + string(3) "six" + [1]=> + int(7) + [2]=> + string(5) "seven" + [3]=> + int(8) + [4]=> + string(5) "eight" + [5]=> + int(9) + [6]=> + string(4) "nine" } array(4) { [0]=> @@ -514,7 +646,23 @@ array(3) { [2]=> int(7) } -array(0) { +array(8) { + [0]=> + int(6) + [1]=> + string(3) "six" + [2]=> + int(7) + [3]=> + string(5) "seven" + [4]=> + int(8) + [5]=> + string(5) "eight" + [6]=> + int(9) + [7]=> + string(4) "nine" } array(5) { [0]=> @@ -534,7 +682,11 @@ array(2) { [1]=> string(4) "nine" } -array(0) { +array(2) { + [0]=> + int(9) + [1]=> + string(4) "nine" } array(0) { } @@ -548,7 +700,21 @@ array(3) { [3]=> string(5) "seven" } -array(0) { +array(7) { + [1]=> + string(3) "six" + [2]=> + int(7) + [3]=> + string(5) "seven" + [4]=> + int(8) + [5]=> + string(5) "eight" + [6]=> + int(9) + [7]=> + string(4) "nine" } array(4) { [1]=> @@ -568,7 +734,23 @@ array(3) { [2]=> int(7) } -array(0) { +array(8) { + [0]=> + int(6) + [1]=> + string(3) "six" + [2]=> + int(7) + [3]=> + string(5) "seven" + [4]=> + int(8) + [5]=> + string(5) "eight" + [6]=> + int(9) + [7]=> + string(4) "nine" } array(5) { [0]=> @@ -588,7 +770,11 @@ array(2) { [7]=> string(4) "nine" } -array(0) { +array(2) { + [6]=> + int(9) + [7]=> + string(4) "nine" } array(0) { } @@ -634,7 +820,15 @@ array(3) { ["d"]=> string(3) "ddd" } -array(0) { +array(4) { + ["A"]=> + string(3) "AAA" + ["c"]=> + string(3) "ccc" + ["d"]=> + string(3) "ddd" + ["e"]=> + string(3) "eee" } array(1) { ["A"]=> @@ -648,7 +842,17 @@ array(3) { ["c"]=> string(3) "ccc" } -array(0) { +array(5) { + ["a"]=> + string(3) "aaa" + ["A"]=> + string(3) "AAA" + ["c"]=> + string(3) "ccc" + ["d"]=> + string(3) "ddd" + ["e"]=> + string(3) "eee" } array(2) { ["a"]=> @@ -662,7 +866,11 @@ array(2) { ["e"]=> string(3) "eee" } -array(0) { +array(2) { + ["d"]=> + string(3) "ddd" + ["e"]=> + string(3) "eee" } array(0) { } @@ -676,8 +884,16 @@ array(3) { ["d"]=> string(3) "ddd" } -array(0) { -} +array(4) { + ["A"]=> + string(3) "AAA" + ["c"]=> + string(3) "ccc" + ["d"]=> + string(3) "ddd" + ["e"]=> + string(3) "eee" +} array(1) { ["A"]=> string(3) "AAA" @@ -690,7 +906,17 @@ array(3) { ["c"]=> string(3) "ccc" } -array(0) { +array(5) { + ["a"]=> + string(3) "aaa" + ["A"]=> + string(3) "AAA" + ["c"]=> + string(3) "ccc" + ["d"]=> + string(3) "ddd" + ["e"]=> + string(3) "eee" } array(2) { ["a"]=> @@ -704,7 +930,11 @@ array(2) { ["e"]=> string(3) "eee" } -array(0) { +array(2) { + ["d"]=> + string(3) "ddd" + ["e"]=> + string(3) "eee" } array(0) { } @@ -750,7 +980,15 @@ array(3) { [2]=> string(4) "four" } -array(0) { +array(4) { + [0]=> + string(3) "two" + [1]=> + string(5) "three" + [2]=> + string(4) "four" + [3]=> + string(4) "five" } array(1) { [0]=> @@ -764,7 +1002,17 @@ array(3) { [2]=> string(5) "three" } -array(0) { +array(5) { + [0]=> + string(3) "one" + [1]=> + string(3) "two" + [2]=> + string(5) "three" + [3]=> + string(4) "four" + [4]=> + string(4) "five" } array(2) { [0]=> @@ -778,7 +1026,11 @@ array(2) { [1]=> string(4) "five" } -array(0) { +array(2) { + [0]=> + string(4) "four" + [1]=> + string(4) "five" } array(0) { } @@ -792,7 +1044,15 @@ array(3) { [4]=> string(4) "four" } -array(0) { +array(4) { + [2]=> + string(3) "two" + [3]=> + string(5) "three" + [4]=> + string(4) "four" + [5]=> + string(4) "five" } array(1) { [2]=> @@ -806,7 +1066,17 @@ array(3) { [3]=> string(5) "three" } -array(0) { +array(5) { + [1]=> + string(3) "one" + [2]=> + string(3) "two" + [3]=> + string(5) "three" + [4]=> + string(4) "four" + [5]=> + string(4) "five" } array(2) { [1]=> @@ -820,7 +1090,11 @@ array(2) { [5]=> string(4) "five" } -array(0) { +array(2) { + [4]=> + string(4) "four" + [5]=> + string(4) "five" } array(0) { } @@ -866,7 +1140,15 @@ array(3) { [2]=> string(4) "four" } -array(0) { +array(4) { + [0]=> + string(3) "two" + [1]=> + int(7) + [2]=> + string(4) "four" + [3]=> + string(4) "five" } array(1) { [0]=> @@ -880,7 +1162,17 @@ array(3) { [2]=> int(7) } -array(0) { +array(5) { + [0]=> + string(3) "one" + [1]=> + string(3) "two" + [2]=> + int(7) + [3]=> + string(4) "four" + [4]=> + string(4) "five" } array(2) { [0]=> @@ -894,7 +1186,11 @@ array(2) { [1]=> string(4) "five" } -array(0) { +array(2) { + [0]=> + string(4) "four" + [1]=> + string(4) "five" } array(0) { } @@ -908,7 +1204,15 @@ array(3) { [4]=> string(4) "four" } -array(0) { +array(4) { + [2]=> + string(3) "two" + [3]=> + int(7) + [4]=> + string(4) "four" + [5]=> + string(4) "five" } array(1) { [2]=> @@ -922,7 +1226,17 @@ array(3) { [3]=> int(7) } -array(0) { +array(5) { + [1]=> + string(3) "one" + [2]=> + string(3) "two" + [3]=> + int(7) + [4]=> + string(4) "four" + [5]=> + string(4) "five" } array(2) { [1]=> @@ -936,7 +1250,11 @@ array(2) { [5]=> string(4) "five" } -array(0) { +array(2) { + [4]=> + string(4) "four" + [5]=> + string(4) "five" } array(0) { } @@ -1002,7 +1320,25 @@ array(3) { [""]=> string(5) "blank" } -array(0) { +array(9) { + [0]=> + string(3) "one" + [1]=> + int(6) + [""]=> + string(5) "blank" + [2]=> + string(5) "float" + ["F"]=> + string(3) "FFF" + ["blank"]=> + string(0) "" + [3]=> + float(3.7) + [4]=> + string(4) "Five" + [5]=> + float(8.6) } array(6) { [0]=> @@ -1026,7 +1362,27 @@ array(3) { [1]=> int(6) } -array(0) { +array(10) { + ["f"]=> + string(3) "fff" + [0]=> + string(3) "one" + [1]=> + int(6) + [""]=> + string(5) "blank" + [2]=> + string(5) "float" + ["F"]=> + string(3) "FFF" + ["blank"]=> + string(0) "" + [3]=> + float(3.7) + [4]=> + string(4) "Five" + [5]=> + float(8.6) } array(7) { ["f"]=> @@ -1050,7 +1406,11 @@ array(2) { [1]=> float(8.6) } -array(0) { +array(2) { + [0]=> + string(4) "Five" + [1]=> + float(8.6) } array(0) { } @@ -1064,7 +1424,25 @@ array(3) { [""]=> string(5) "blank" } -array(0) { +array(9) { + [1]=> + string(3) "one" + [4]=> + int(6) + [""]=> + string(5) "blank" + [2]=> + string(5) "float" + ["F"]=> + string(3) "FFF" + ["blank"]=> + string(0) "" + [3]=> + float(3.7) + [5]=> + string(4) "Five" + [6]=> + float(8.6) } array(6) { [1]=> @@ -1088,7 +1466,27 @@ array(3) { [4]=> int(6) } -array(0) { +array(10) { + ["f"]=> + string(3) "fff" + [1]=> + string(3) "one" + [4]=> + int(6) + [""]=> + string(5) "blank" + [2]=> + string(5) "float" + ["F"]=> + string(3) "FFF" + ["blank"]=> + string(0) "" + [3]=> + float(3.7) + [5]=> + string(4) "Five" + [6]=> + float(8.6) } array(7) { ["f"]=> @@ -1112,7 +1510,11 @@ array(2) { [6]=> float(8.6) } -array(0) { +array(2) { + [5]=> + string(4) "Five" + [6]=> + float(8.6) } array(0) { } @@ -1154,7 +1556,13 @@ array(3) { [2]=> string(2) "45" } -array(0) { +array(3) { + [0]=> + string(4) "name" + [1]=> + string(3) "age" + [2]=> + string(2) "45" } array(0) { } @@ -1166,7 +1574,15 @@ array(3) { [2]=> string(3) "age" } -array(0) { +array(4) { + [0]=> + int(12) + [1]=> + string(4) "name" + [2]=> + string(3) "age" + [3]=> + string(2) "45" } array(1) { [0]=> @@ -1178,7 +1594,11 @@ array(2) { [1]=> string(2) "45" } -array(0) { +array(2) { + [0]=> + string(3) "age" + [1]=> + string(2) "45" } array(0) { } @@ -1192,7 +1612,13 @@ array(3) { [3]=> string(2) "45" } -array(0) { +array(3) { + [1]=> + string(4) "name" + [2]=> + string(3) "age" + [3]=> + string(2) "45" } array(0) { } @@ -1204,7 +1630,15 @@ array(3) { [2]=> string(3) "age" } -array(0) { +array(4) { + [0]=> + int(12) + [1]=> + string(4) "name" + [2]=> + string(3) "age" + [3]=> + string(2) "45" } array(1) { [0]=> @@ -1216,7 +1650,11 @@ array(2) { [3]=> string(2) "45" } -array(0) { +array(2) { + [2]=> + string(3) "age" + [3]=> + string(2) "45" } array(0) { } @@ -1307,7 +1745,23 @@ array(2) { array(0) { } } -array(0) { +array(2) { + [0]=> + array(5) { + [0]=> + int(10) + [1]=> + int(20) + [2]=> + int(30) + [3]=> + int(40) + [4]=> + int(50) + } + [1]=> + array(0) { + } } array(0) { } @@ -1338,7 +1792,32 @@ array(3) { array(0) { } } -array(0) { +array(3) { + [0]=> + array(3) { + [0]=> + string(3) "oNe" + [1]=> + string(3) "tWo" + [2]=> + int(4) + } + [1]=> + array(5) { + [0]=> + int(10) + [1]=> + int(20) + [2]=> + int(30) + [3]=> + int(40) + [4]=> + int(50) + } + [2]=> + array(0) { + } } array(0) { } @@ -1360,7 +1839,23 @@ array(2) { array(0) { } } -array(0) { +array(2) { + [0]=> + array(5) { + [0]=> + int(10) + [1]=> + int(20) + [2]=> + int(30) + [3]=> + int(40) + [4]=> + int(50) + } + [1]=> + array(0) { + } } array(0) { } @@ -1384,7 +1879,23 @@ array(2) { array(0) { } } -array(0) { +array(2) { + [1]=> + array(5) { + [0]=> + int(10) + [1]=> + int(20) + [2]=> + int(30) + [3]=> + int(40) + [4]=> + int(50) + } + [2]=> + array(0) { + } } array(0) { } @@ -1415,7 +1926,32 @@ array(3) { array(0) { } } -array(0) { +array(3) { + [0]=> + array(3) { + [0]=> + string(3) "oNe" + [1]=> + string(3) "tWo" + [2]=> + int(4) + } + [1]=> + array(5) { + [0]=> + int(10) + [1]=> + int(20) + [2]=> + int(30) + [3]=> + int(40) + [4]=> + int(50) + } + [2]=> + array(0) { + } } array(0) { } @@ -1437,7 +1973,23 @@ array(2) { array(0) { } } -array(0) { +array(2) { + [1]=> + array(5) { + [0]=> + int(10) + [1]=> + int(20) + [2]=> + int(30) + [3]=> + int(40) + [4]=> + int(50) + } + [2]=> + array(0) { + } } array(0) { } diff --git a/ext/standard/tests/array/bug43541.phpt b/ext/standard/tests/array/bug43541.phpt new file mode 100644 index 0000000000..847f61ad2b --- /dev/null +++ b/ext/standard/tests/array/bug43541.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #43541 (length parameter omitted or not does not work when casted to float) +--FILE-- + +--EXPECT-- +array(2) { + [0]=> + int(1) + [1]=> + int(2) +} +array(2) { + [0]=> + int(1) + [1]=> + int(2) +}