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