1--TEST--
2Test array_pad() function : usage variations - unexpected values for 'pad_size' argument(Bug#43482)
3--SKIPIF--
4<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64-bit only");
5--FILE--
6<?php
7/* Prototype  : array array_pad(array $input, int $pad_size, mixed $pad_value)
8 * Description: Returns a copy of input array padded with pad_value to size pad_size
9 * Source code: ext/standard/array.c
10*/
11
12/*
13* Testing array_pad() function by passing values to $pad_size argument other than integers
14* and see that function outputs proper warning messages wherever expected.
15* The $input and $pad_value arguments passed are fixed values.
16*/
17
18echo "*** Testing array_pad() : passing non integer values to \$pad_size argument ***\n";
19
20// Initialise $input and $pad_value arguments
21$input = array(1, 2);
22$pad_value = 1;
23
24//get an unset variable
25$unset_var = 10;
26unset ($unset_var);
27
28// get a class
29class classA
30{
31  public function __toString() {
32    return "Class A object";
33  }
34}
35
36//array of values to iterate over
37$pad_sizes = array(
38
39      // float data
40/*1*/  10.5,
41       -10.5,
42       12.3456789000e10,
43       -12.3456789000e10,
44       12.3456789000E-10,
45       .5,
46
47       // array data
48/*6*/  array(),
49       array(0),
50       array(1),
51       array(1, 2),
52       array('color' => 'red', 'item' => 'pen'),
53
54       // null data
55/*11*/ NULL,
56       null,
57
58       // boolean data
59/*13*/ true,
60       false,
61       TRUE,
62       FALSE,
63
64       // empty data
65/*17*/ "",
66       '',
67
68       // string data
69/*19*/ "string",
70       'string',
71
72       // object data
73/*21*/ new classA(),
74
75       // undefined data
76/*22*/ @$undefined_var,
77
78       // unset data
79/*23*/ @$unset_var,
80);
81
82// loop through each element of $pad_sizes to check the behavior of array_pad()
83$iterator = 1;
84foreach($pad_sizes as $pad_size) {
85  echo "-- Iteration $iterator --\n";
86  var_dump( array_pad($input, $pad_size, $pad_value) );
87  $iterator++;
88};
89
90echo "Done";
91?>
92--EXPECTF--
93*** Testing array_pad() : passing non integer values to $pad_size argument ***
94-- Iteration 1 --
95array(10) {
96  [0]=>
97  int(1)
98  [1]=>
99  int(2)
100  [2]=>
101  int(1)
102  [3]=>
103  int(1)
104  [4]=>
105  int(1)
106  [5]=>
107  int(1)
108  [6]=>
109  int(1)
110  [7]=>
111  int(1)
112  [8]=>
113  int(1)
114  [9]=>
115  int(1)
116}
117-- Iteration 2 --
118array(10) {
119  [0]=>
120  int(1)
121  [1]=>
122  int(1)
123  [2]=>
124  int(1)
125  [3]=>
126  int(1)
127  [4]=>
128  int(1)
129  [5]=>
130  int(1)
131  [6]=>
132  int(1)
133  [7]=>
134  int(1)
135  [8]=>
136  int(1)
137  [9]=>
138  int(2)
139}
140-- Iteration 3 --
141
142Warning: array_pad(): You may only pad up to 1048576 elements at a time in %s on line %d
143bool(false)
144-- Iteration 4 --
145
146Warning: array_pad(): You may only pad up to 1048576 elements at a time in %s on line %d
147bool(false)
148-- Iteration 5 --
149array(2) {
150  [0]=>
151  int(1)
152  [1]=>
153  int(2)
154}
155-- Iteration 6 --
156array(2) {
157  [0]=>
158  int(1)
159  [1]=>
160  int(2)
161}
162-- Iteration 7 --
163
164Warning: array_pad() expects parameter 2 to be int, array given in %s on line %d
165NULL
166-- Iteration 8 --
167
168Warning: array_pad() expects parameter 2 to be int, array given in %s on line %d
169NULL
170-- Iteration 9 --
171
172Warning: array_pad() expects parameter 2 to be int, array given in %s on line %d
173NULL
174-- Iteration 10 --
175
176Warning: array_pad() expects parameter 2 to be int, array given in %s on line %d
177NULL
178-- Iteration 11 --
179
180Warning: array_pad() expects parameter 2 to be int, array given in %s on line %d
181NULL
182-- Iteration 12 --
183array(2) {
184  [0]=>
185  int(1)
186  [1]=>
187  int(2)
188}
189-- Iteration 13 --
190array(2) {
191  [0]=>
192  int(1)
193  [1]=>
194  int(2)
195}
196-- Iteration 14 --
197array(2) {
198  [0]=>
199  int(1)
200  [1]=>
201  int(2)
202}
203-- Iteration 15 --
204array(2) {
205  [0]=>
206  int(1)
207  [1]=>
208  int(2)
209}
210-- Iteration 16 --
211array(2) {
212  [0]=>
213  int(1)
214  [1]=>
215  int(2)
216}
217-- Iteration 17 --
218array(2) {
219  [0]=>
220  int(1)
221  [1]=>
222  int(2)
223}
224-- Iteration 18 --
225
226Warning: array_pad() expects parameter 2 to be int, string given in %s on line %d
227NULL
228-- Iteration 19 --
229
230Warning: array_pad() expects parameter 2 to be int, string given in %s on line %d
231NULL
232-- Iteration 20 --
233
234Warning: array_pad() expects parameter 2 to be int, string given in %s on line %d
235NULL
236-- Iteration 21 --
237
238Warning: array_pad() expects parameter 2 to be int, string given in %s on line %d
239NULL
240-- Iteration 22 --
241
242Warning: array_pad() expects parameter 2 to be int, object given in %s on line %d
243NULL
244-- Iteration 23 --
245array(2) {
246  [0]=>
247  int(1)
248  [1]=>
249  int(2)
250}
251-- Iteration 24 --
252array(2) {
253  [0]=>
254  int(1)
255  [1]=>
256  int(2)
257}
258Done
259