1--TEST--
2Test iconv_mime_decode() function : usage variations - Pass different data types to charset arg
3--SKIPIF--
4<?php
5extension_loaded('iconv') or die('skip');
6function_exists('iconv_mime_decode') or die("skip iconv_mime_decode() is not available in this build");
7?>
8--FILE--
9<?php
10/* Prototype  : string iconv_mime_decode(string encoded_string [, int mode, string charset])
11 * Description: Decodes a mime header field
12 * Source code: ext/iconv/iconv.c
13 */
14
15/*
16 * Pass different data types to $str argument to see how iconv_mime_decode() behaves
17 */
18
19echo "*** Testing iconv_mime_decode() : usage variations ***\n";
20
21// Initialise function arguments not being substituted
22// Some of the parameters actually passed to charset will request to use
23// a default charset determined by the platform. In order for this test to
24// run on both linux and windows, the subject will have to be ascii only.
25$header = b'Subject: =?UTF-8?B?QSBTYW1wbGUgVGVzdA==?=';
26$mode = ICONV_MIME_DECODE_CONTINUE_ON_ERROR;
27$charset = 'UTF-8';
28
29
30//get an unset variable
31$unset_var = 10;
32unset ($unset_var);
33
34// get a class
35class classA
36{
37  public function __toString() {
38    return "Class A object";
39  }
40}
41
42// heredoc string
43$heredoc = <<<EOT
44hello world
45EOT;
46
47// get a resource variable
48$fp = fopen(__FILE__, "r");
49
50// unexpected values to be passed to $str argument
51$inputs = array(
52
53       // int data
54/*1*/  0,
55       1,
56       12345,
57       -2345,
58
59       // float data
60/*5*/  10.5,
61       -10.5,
62       12.3456789000e10,
63       12.3456789000E-10,
64       .5,
65
66       // null data
67/*10*/ NULL,
68       null,
69
70       // boolean data
71/*12*/ true,
72       false,
73       TRUE,
74       FALSE,
75
76       // empty data
77/*16*/ "",
78       '',
79
80       // string data
81/*18*/ "string",
82       'string',
83       $heredoc,
84
85       // object data
86/*21*/ new classA(),
87
88       // undefined data
89/*22*/ @$undefined_var,
90
91       // unset data
92/*23*/ @$unset_var,
93
94       // resource variable
95/*24*/ $fp
96);
97
98// loop through each element of $inputs to check the behavior of iconv_mime_decode()
99$iterator = 1;
100foreach($inputs as $input) {
101  echo "\n-- Iteration $iterator --\n";
102  $res = iconv_mime_decode($header, $mode, $input);
103  if ($res !== false) {
104  	 var_dump(bin2hex($res));
105  }
106  else {
107     var_dump($res);
108  }
109  $iterator++;
110};
111
112fclose($fp);
113
114echo "Done";
115?>
116--EXPECTF--
117*** Testing iconv_mime_decode() : usage variations ***
118
119-- Iteration 1 --
120
121Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `0' is not allowed in %s on line %d
122bool(false)
123
124-- Iteration 2 --
125
126Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1' is not allowed in %s on line %d
127bool(false)
128
129-- Iteration 3 --
130
131Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `12345' is not allowed in %s on line %d
132bool(false)
133
134-- Iteration 4 --
135
136Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `-2345' is not allowed in %s on line %d
137bool(false)
138
139-- Iteration 5 --
140
141Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `10.5' is not allowed in %s on line %d
142bool(false)
143
144-- Iteration 6 --
145
146Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `-10.5' is not allowed in %s on line %d
147bool(false)
148
149-- Iteration 7 --
150
151Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `123456789000' is not allowed in %s on line %d
152bool(false)
153
154-- Iteration 8 --
155
156Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1.23456789E-9' is not allowed in %s on line %d
157bool(false)
158
159-- Iteration 9 --
160
161Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `0.5' is not allowed in %s on line %d
162bool(false)
163
164-- Iteration 10 --
165string(44) "5375626a6563743a20412053616d706c652054657374"
166
167-- Iteration 11 --
168string(44) "5375626a6563743a20412053616d706c652054657374"
169
170-- Iteration 12 --
171
172Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1' is not allowed in %s on line %d
173bool(false)
174
175-- Iteration 13 --
176string(44) "5375626a6563743a20412053616d706c652054657374"
177
178-- Iteration 14 --
179
180Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `1' is not allowed in %s on line %d
181bool(false)
182
183-- Iteration 15 --
184string(44) "5375626a6563743a20412053616d706c652054657374"
185
186-- Iteration 16 --
187string(44) "5375626a6563743a20412053616d706c652054657374"
188
189-- Iteration 17 --
190string(44) "5375626a6563743a20412053616d706c652054657374"
191
192-- Iteration 18 --
193
194Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `string' is not allowed in %s on line %d
195bool(false)
196
197-- Iteration 19 --
198
199Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `string' is not allowed in %s on line %d
200bool(false)
201
202-- Iteration 20 --
203
204Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `hello world' is not allowed in %s on line %d
205bool(false)
206
207-- Iteration 21 --
208
209Notice: iconv_mime_decode(): Wrong charset, conversion from `???' to `Class A object' is not allowed in %s on line %d
210bool(false)
211
212-- Iteration 22 --
213string(44) "5375626a6563743a20412053616d706c652054657374"
214
215-- Iteration 23 --
216string(44) "5375626a6563743a20412053616d706c652054657374"
217
218-- Iteration 24 --
219
220Warning: iconv_mime_decode() expects parameter 3 to be string, resource given in %s on line %d
221bool(false)
222Done