Skip to content

Commit 25b631d

Browse files
committed
ext/ldap: Add test cases for (Value|Type)Errors in ldap_modify_batch()
1 parent ee3e10a commit 25b631d

File tree

1 file changed

+276
-0
lines changed

1 file changed

+276
-0
lines changed
Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
--TEST--
2+
ldap_modify_batch() - ValueErrors and TypeErrors
3+
--EXTENSIONS--
4+
ldap
5+
--FILE--
6+
<?php
7+
8+
/* We are assuming 3333 is not connectable */
9+
$ldap = ldap_connect('ldap://127.0.0.1:3333');
10+
11+
$valid_dn = "cn=userA,something";
12+
13+
$dn = "dn_with\0nul_byte";
14+
try {
15+
var_dump(ldap_modify_batch($ldap, $dn, []));
16+
} catch (Throwable $e) {
17+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
18+
}
19+
20+
$empty_list = [];
21+
try {
22+
var_dump(ldap_modify_batch($ldap, $valid_dn, $empty_list));
23+
} catch (Throwable $e) {
24+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
25+
}
26+
27+
$not_list1 = [
28+
'entry1' => [],
29+
'entry2' => [],
30+
];
31+
try {
32+
var_dump(ldap_modify_batch($ldap, $valid_dn, $not_list1));
33+
} catch (Throwable $e) {
34+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
35+
}
36+
37+
$not_list2 = [
38+
[
39+
"attrib" => "attrib1",
40+
"modtype" => LDAP_MODIFY_BATCH_ADD,
41+
"values" => ["value1"],
42+
],
43+
2 => [],
44+
];
45+
try {
46+
var_dump(ldap_modify_batch($ldap, $valid_dn, $not_list2));
47+
} catch (Throwable $e) {
48+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
49+
}
50+
51+
52+
$not_list_of_arrays = [
53+
[
54+
"attrib" => "attrib1",
55+
"modtype" => LDAP_MODIFY_BATCH_ADD,
56+
"values" => ["value1"],
57+
],
58+
'not an array',
59+
];
60+
try {
61+
var_dump(ldap_modify_batch($ldap, $valid_dn, $not_list_of_arrays));
62+
} catch (Throwable $e) {
63+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
64+
}
65+
66+
$modifications_not_all_dicts = [
67+
[
68+
"attrib" => "attrib1",
69+
"modtype" => LDAP_MODIFY_BATCH_ADD,
70+
"values" => ["value1"],
71+
],
72+
[
73+
"attrib" => "attrib2",
74+
"modtype" => LDAP_MODIFY_BATCH_REMOVE_ALL,
75+
4 => ["value2"],
76+
],
77+
[
78+
"attrib" => "attrib3",
79+
"modtype" => LDAP_MODIFY_BATCH_ADD,
80+
"values" => ["value3"],
81+
],
82+
];
83+
try {
84+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modifications_not_all_dicts));
85+
} catch (Throwable $e) {
86+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
87+
}
88+
89+
$modification_has_invalid_key = [
90+
[
91+
"attrib" => "attrib1",
92+
"modtype" => LDAP_MODIFY_BATCH_ADD,
93+
"values" => ["value1"],
94+
"random" => "what",
95+
],
96+
];
97+
try {
98+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_has_invalid_key));
99+
} catch (Throwable $e) {
100+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
101+
}
102+
103+
$modification_attrib_not_string = [
104+
[
105+
"attrib" => 25,
106+
"modtype" => LDAP_MODIFY_BATCH_ADD,
107+
"values" => ["value1"],
108+
],
109+
];
110+
try {
111+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_attrib_not_string));
112+
} catch (Throwable $e) {
113+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
114+
}
115+
116+
$modification_attrib_has_nul_byte = [
117+
[
118+
"attrib" => "attrib\0with\0nul\0byte",
119+
"modtype" => LDAP_MODIFY_BATCH_ADD,
120+
"values" => ["value1"],
121+
],
122+
];
123+
try {
124+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_attrib_has_nul_byte));
125+
} catch (Throwable $e) {
126+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
127+
}
128+
129+
$modification_modtype_not_int = [
130+
[
131+
"attrib" => "attrib1",
132+
"modtype" => new stdClass(),
133+
"values" => ["value1"],
134+
],
135+
];
136+
try {
137+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_modtype_not_int));
138+
} catch (Throwable $e) {
139+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
140+
}
141+
142+
$modification_modtype_invalid_value = [
143+
[
144+
"attrib" => "attrib1",
145+
"modtype" => 42,
146+
"values" => ["value1"],
147+
],
148+
];
149+
try {
150+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_modtype_invalid_value));
151+
} catch (Throwable $e) {
152+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
153+
}
154+
155+
$modification_modtype_remove_all_with_values_key = [
156+
[
157+
"attrib" => "attrib1",
158+
"modtype" => LDAP_MODIFY_BATCH_REMOVE_ALL,
159+
"values" => ["value1"],
160+
],
161+
];
162+
try {
163+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_modtype_remove_all_with_values_key));
164+
} catch (Throwable $e) {
165+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
166+
}
167+
168+
$modification_modtype_not_remove_all_without_values_key = [
169+
[
170+
"attrib" => "attrib1",
171+
"modtype" => LDAP_MODIFY_BATCH_ADD,
172+
],
173+
];
174+
try {
175+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_modtype_not_remove_all_without_values_key));
176+
} catch (Throwable $e) {
177+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
178+
}
179+
180+
$modification_values_invalid_value = [
181+
[
182+
"attrib" => "attrib1",
183+
"modtype" => LDAP_MODIFY_BATCH_ADD,
184+
"values" => "value1",
185+
],
186+
];
187+
try {
188+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_values_invalid_value));
189+
} catch (Throwable $e) {
190+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
191+
}
192+
193+
$modification_values_empty_array = [
194+
[
195+
"attrib" => "attrib1",
196+
"modtype" => LDAP_MODIFY_BATCH_ADD,
197+
"values" => [],
198+
],
199+
];
200+
try {
201+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_values_empty_array));
202+
} catch (Throwable $e) {
203+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
204+
}
205+
206+
$modification_values_not_list1 = [
207+
[
208+
"attrib" => "attrib1",
209+
"modtype" => LDAP_MODIFY_BATCH_ADD,
210+
"values" => $not_list1,
211+
],
212+
];
213+
try {
214+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_values_not_list1));
215+
} catch (Throwable $e) {
216+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
217+
}
218+
219+
$modification_values_not_list2 = [
220+
[
221+
"attrib" => "attrib1",
222+
"modtype" => LDAP_MODIFY_BATCH_ADD,
223+
"values" => $not_list2,
224+
],
225+
];
226+
try {
227+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_values_not_list2));
228+
} catch (Throwable $e) {
229+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
230+
}
231+
232+
$modification_missing_attrib_key = [
233+
[
234+
"modtype" => LDAP_MODIFY_BATCH_ADD,
235+
"values" => ["value1"],
236+
],
237+
];
238+
try {
239+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_missing_attrib_key));
240+
} catch (Throwable $e) {
241+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
242+
}
243+
244+
$modification_missing_modtype_key = [
245+
[
246+
"attrib" => "attrib1",
247+
"values" => ["value1"],
248+
],
249+
];
250+
try {
251+
var_dump(ldap_modify_batch($ldap, $valid_dn, $modification_missing_modtype_key));
252+
} catch (Throwable $e) {
253+
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
254+
}
255+
256+
?>
257+
--EXPECT--
258+
TypeError: ldap_modify_batch(): Argument #2 ($dn) must not contain null bytes
259+
TypeError: ldap_modify_batch(): Argument #3 ($modifications_info) must be integer-indexed
260+
TypeError: ldap_modify_batch(): Argument #3 ($modifications_info) must be integer-indexed
261+
ValueError: ldap_modify_batch(): Argument #3 ($modifications_info) must have consecutive integer indices starting from 0
262+
ValueError: ldap_modify_batch(): Argument #3 ($modifications_info) must only contain arrays
263+
TypeError: ldap_modify_batch(): Argument #3 ($modifications_info) must only contain string-indexed arrays
264+
ValueError: ldap_modify_batch(): Argument #3 ($modifications_info) must contain arrays only containing the "attrib", "modtype" and "values" keys
265+
TypeError: ldap_modify_batch(): Option "attrib" must be of type string, int given
266+
TypeError: ldap_modify_batch(): Option "attrib" cannot contain null-bytes
267+
TypeError: ldap_modify_batch(): Option "modtype" must be of type int, stdClass given
268+
ValueError: ldap_modify_batch(): Option "modtype" must be one of the LDAP_MODIFY_BATCH_* constants
269+
ValueError: ldap_modify_batch(): If option "modtype" is LDAP_MODIFY_BATCH_REMOVE_ALL, option "values" cannot be provided
270+
ValueError: ldap_modify_batch(): If option "modtype" is not LDAP_MODIFY_BATCH_REMOVE_ALL, option "values" must be provided
271+
TypeError: ldap_modify_batch(): Option "values" must be of type array, string given
272+
ValueError: ldap_modify_batch(): Option "values" must not be empty
273+
ValueError: ldap_modify_batch(): Option "values" must be integer-indexed
274+
ValueError: ldap_modify_batch(): Option "values" must have consecutive integer indices starting from 0
275+
ValueError: ldap_modify_batch(): Required option "attrib" is missing
276+
ValueError: ldap_modify_batch(): Required option "modtype" is missing

0 commit comments

Comments
 (0)