1--TEST--
2Test session_decode() function : basic functionality
3--SKIPIF--
4<?php include('skipif.inc'); ?>
5--FILE--
6<?php
7
8ob_start();
9
10echo "*** Testing session_decode() : basic functionality ***\n";
11
12// Get an unset variable
13$unset_var = 10;
14unset($unset_var);
15
16class classA
17{
18    public function __toString() {
19        return "Hello World!";
20    }
21}
22
23$heredoc = <<<EOT
24Hello World!
25EOT;
26
27$fp = fopen(__FILE__, "r");
28
29// Unexpected values to be passed as arguments
30$inputs = array(
31
32       // Integer data
33/*1*/  0,
34       1,
35       12345,
36       -2345,
37
38       // Float data
39/*5*/  10.5,
40       -10.5,
41       12.3456789000e10,
42       12.3456789000E-10,
43       .5,
44
45       // Null data
46/*10*/ NULL,
47       null,
48
49       // Boolean data
50/*12*/ true,
51       false,
52       TRUE,
53       FALSE,
54
55       // Empty strings
56/*16*/ "",
57       '',
58
59       // Invalid string data
60/*18*/ "Nothing",
61       'Nothing',
62       $heredoc,
63
64       // Object data
65/*21*/ new classA(),
66
67       // Undefined data
68/*22*/ @$undefined_var,
69
70       // Unset data
71/*23*/ @$unset_var,
72
73       // Resource variable
74/*24*/ $fp
75);
76
77ini_set('session.serialize_handler', 'php_serialize');
78var_dump(session_start());
79$iterator = 1;
80foreach($inputs as $input) {
81    echo "\n-- Iteration $iterator --\n";
82    $_SESSION["data"] = $input;
83    $encoded = session_encode();
84    var_dump(session_decode($encoded));
85    var_dump($_SESSION);
86    $iterator++;
87};
88
89var_dump(session_destroy());
90fclose($fp);
91echo "Done";
92ob_end_flush();
93?>
94--EXPECT--
95*** Testing session_decode() : basic functionality ***
96bool(true)
97
98-- Iteration 1 --
99bool(true)
100array(1) {
101  ["data"]=>
102  int(0)
103}
104
105-- Iteration 2 --
106bool(true)
107array(1) {
108  ["data"]=>
109  int(1)
110}
111
112-- Iteration 3 --
113bool(true)
114array(1) {
115  ["data"]=>
116  int(12345)
117}
118
119-- Iteration 4 --
120bool(true)
121array(1) {
122  ["data"]=>
123  int(-2345)
124}
125
126-- Iteration 5 --
127bool(true)
128array(1) {
129  ["data"]=>
130  float(10.5)
131}
132
133-- Iteration 6 --
134bool(true)
135array(1) {
136  ["data"]=>
137  float(-10.5)
138}
139
140-- Iteration 7 --
141bool(true)
142array(1) {
143  ["data"]=>
144  float(123456789000)
145}
146
147-- Iteration 8 --
148bool(true)
149array(1) {
150  ["data"]=>
151  float(1.23456789E-9)
152}
153
154-- Iteration 9 --
155bool(true)
156array(1) {
157  ["data"]=>
158  float(0.5)
159}
160
161-- Iteration 10 --
162bool(true)
163array(1) {
164  ["data"]=>
165  NULL
166}
167
168-- Iteration 11 --
169bool(true)
170array(1) {
171  ["data"]=>
172  NULL
173}
174
175-- Iteration 12 --
176bool(true)
177array(1) {
178  ["data"]=>
179  bool(true)
180}
181
182-- Iteration 13 --
183bool(true)
184array(1) {
185  ["data"]=>
186  bool(false)
187}
188
189-- Iteration 14 --
190bool(true)
191array(1) {
192  ["data"]=>
193  bool(true)
194}
195
196-- Iteration 15 --
197bool(true)
198array(1) {
199  ["data"]=>
200  bool(false)
201}
202
203-- Iteration 16 --
204bool(true)
205array(1) {
206  ["data"]=>
207  string(0) ""
208}
209
210-- Iteration 17 --
211bool(true)
212array(1) {
213  ["data"]=>
214  string(0) ""
215}
216
217-- Iteration 18 --
218bool(true)
219array(1) {
220  ["data"]=>
221  string(7) "Nothing"
222}
223
224-- Iteration 19 --
225bool(true)
226array(1) {
227  ["data"]=>
228  string(7) "Nothing"
229}
230
231-- Iteration 20 --
232bool(true)
233array(1) {
234  ["data"]=>
235  string(12) "Hello World!"
236}
237
238-- Iteration 21 --
239bool(true)
240array(1) {
241  ["data"]=>
242  object(classA)#2 (0) {
243  }
244}
245
246-- Iteration 22 --
247bool(true)
248array(1) {
249  ["data"]=>
250  NULL
251}
252
253-- Iteration 23 --
254bool(true)
255array(1) {
256  ["data"]=>
257  NULL
258}
259
260-- Iteration 24 --
261bool(true)
262array(1) {
263  ["data"]=>
264  int(0)
265}
266bool(true)
267Done
268