Skip to content

Commit eaf66df

Browse files
committed
Promote warnings to errors in array_multisort()
1 parent c70f92c commit eaf66df

File tree

6 files changed

+122
-178
lines changed

6 files changed

+122
-178
lines changed

ext/standard/array.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5613,7 +5613,7 @@ PHPAPI int php_multisort_compare(const void *a, const void *b) /* {{{ */
56135613
#define MULTISORT_ABORT \
56145614
efree(func); \
56155615
efree(arrays); \
5616-
RETURN_FALSE;
5616+
return;
56175617

56185618
static void array_bucket_p_sawp(void *p, void *q) /* {{{ */ {
56195619
Bucket *t;
@@ -5690,7 +5690,7 @@ PHP_FUNCTION(array_multisort)
56905690
sort_order = Z_LVAL_P(arg) == PHP_SORT_DESC ? PHP_SORT_DESC : PHP_SORT_ASC;
56915691
parse_state[MULTISORT_ORDER] = 0;
56925692
} else {
5693-
php_error_docref(NULL, E_WARNING, "Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1);
5693+
zend_type_error("Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1);
56945694
MULTISORT_ABORT;
56955695
}
56965696
break;
@@ -5706,19 +5706,19 @@ PHP_FUNCTION(array_multisort)
57065706
sort_type = (int)Z_LVAL_P(arg);
57075707
parse_state[MULTISORT_TYPE] = 0;
57085708
} else {
5709-
php_error_docref(NULL, E_WARNING, "Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1);
5709+
zend_type_error("Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1);
57105710
MULTISORT_ABORT;
57115711
}
57125712
break;
57135713

57145714
default:
5715-
php_error_docref(NULL, E_WARNING, "Argument #%d is an unknown sort flag", i + 1);
5715+
zend_type_error("Argument #%d is an unknown sort flag", i + 1);
57165716
MULTISORT_ABORT;
57175717
break;
57185718

57195719
}
57205720
} else {
5721-
php_error_docref(NULL, E_WARNING, "Argument #%d is expected to be an array or a sort flag", i + 1);
5721+
zend_type_error("Argument #%d is expected to be an array or a sort flag", i + 1);
57225722
MULTISORT_ABORT;
57235723
}
57245724
}
@@ -5729,7 +5729,7 @@ PHP_FUNCTION(array_multisort)
57295729
array_size = zend_hash_num_elements(Z_ARRVAL_P(arrays[0]));
57305730
for (i = 0; i < num_arrays; i++) {
57315731
if (zend_hash_num_elements(Z_ARRVAL_P(arrays[i])) != (uint32_t)array_size) {
5732-
php_error_docref(NULL, E_WARNING, "Array sizes are inconsistent");
5732+
zend_throw_error(NULL, "Array sizes are inconsistent");
57335733
MULTISORT_ABORT;
57345734
}
57355735
}

ext/standard/tests/array/array_multisort_error.phpt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,28 @@ echo "*** Testing array_multisort() : error conditions ***\n";
1212

1313
echo "\n-- Testing array_multisort() function with repeated flags --\n";
1414
$ar1 = array(1);
15-
var_dump( array_multisort($ar1, SORT_ASC, SORT_ASC) );
15+
try {
16+
var_dump( array_multisort($ar1, SORT_ASC, SORT_ASC) );
17+
} catch (Error $e) {
18+
echo $e->getMessage() . "\n";
19+
}
1620

1721
echo "\n-- Testing array_multisort() function with repeated flags --\n";
1822
$ar1 = array(1);
19-
var_dump( array_multisort($ar1, SORT_STRING, SORT_NUMERIC) );
23+
try {
24+
var_dump( array_multisort($ar1, SORT_STRING, SORT_NUMERIC) );
25+
} catch (Error $e) {
26+
echo $e->getMessage() . "\n";
27+
}
2028

2129
?>
2230
===DONE===
23-
--EXPECTF--
31+
--EXPECT--
2432
*** Testing array_multisort() : error conditions ***
2533

2634
-- Testing array_multisort() function with repeated flags --
27-
28-
Warning: array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified in %sarray_multisort_error.php on line %d
29-
bool(false)
35+
Argument #3 is expected to be an array or sorting flag that has not already been specified
3036

3137
-- Testing array_multisort() function with repeated flags --
32-
33-
Warning: array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified in %sarray_multisort_error.php on line %d
34-
bool(false)
38+
Argument #3 is expected to be an array or sorting flag that has not already been specified
3539
===DONE===

ext/standard/tests/array/array_multisort_variation1.phpt

Lines changed: 31 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -97,111 +97,90 @@ $inputs = array(
9797

9898
foreach($inputs as $key =>$value) {
9999
echo "\n--$key--\n";
100-
var_dump( array_multisort($value));
100+
try {
101+
var_dump( array_multisort($value));
102+
} catch (Error $e) {
103+
echo $e->getMessage() . "\n";
104+
}
101105
};
102106

103107
?>
104108
===DONE===
105-
--EXPECTF--
109+
--EXPECT--
106110
*** Testing array_multisort() : usage variation ***
107111

108112
--int 0--
109-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation1.php(%d)
110-
bool(false)
113+
Argument #1 is expected to be an array or sorting flag that has not already been specified
111114

112115
--int 1--
113-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation1.php(%d)
114-
bool(false)
116+
Argument #1 is expected to be an array or sorting flag that has not already been specified
115117

116118
--int 12345--
117-
Error: 2 - array_multisort(): Argument #1 is an unknown sort flag, %sarray_multisort_variation1.php(%d)
118-
bool(false)
119+
Argument #1 is an unknown sort flag
119120

120121
--int -12345--
121-
Error: 2 - array_multisort(): Argument #1 is an unknown sort flag, %sarray_multisort_variation1.php(%d)
122-
bool(false)
122+
Argument #1 is an unknown sort flag
123123

124124
--float 10.5--
125-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
126-
bool(false)
125+
Argument #1 is expected to be an array or a sort flag
127126

128127
--float -10.5--
129-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
130-
bool(false)
128+
Argument #1 is expected to be an array or a sort flag
131129

132130
--float 12.3456789000e10--
133-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
134-
bool(false)
131+
Argument #1 is expected to be an array or a sort flag
135132

136133
--float -12.3456789000e10--
137-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
138-
bool(false)
134+
Argument #1 is expected to be an array or a sort flag
139135

140136
--float .5--
141-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
142-
bool(false)
137+
Argument #1 is expected to be an array or a sort flag
143138

144139
--uppercase NULL--
145-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
146-
bool(false)
140+
Argument #1 is expected to be an array or a sort flag
147141

148142
--lowercase null--
149-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
150-
bool(false)
143+
Argument #1 is expected to be an array or a sort flag
151144

152145
--lowercase true--
153-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
154-
bool(false)
146+
Argument #1 is expected to be an array or a sort flag
155147

156148
--lowercase false--
157-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
158-
bool(false)
149+
Argument #1 is expected to be an array or a sort flag
159150

160151
--uppercase TRUE--
161-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
162-
bool(false)
152+
Argument #1 is expected to be an array or a sort flag
163153

164154
--uppercase FALSE--
165-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
166-
bool(false)
155+
Argument #1 is expected to be an array or a sort flag
167156

168157
--empty string DQ--
169-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
170-
bool(false)
158+
Argument #1 is expected to be an array or a sort flag
171159

172160
--empty string SQ--
173-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
174-
bool(false)
161+
Argument #1 is expected to be an array or a sort flag
175162

176163
--string DQ--
177-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
178-
bool(false)
164+
Argument #1 is expected to be an array or a sort flag
179165

180166
--string SQ--
181-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
182-
bool(false)
167+
Argument #1 is expected to be an array or a sort flag
183168

184169
--mixed case string--
185-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
186-
bool(false)
170+
Argument #1 is expected to be an array or a sort flag
187171

188172
--heredoc--
189-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
190-
bool(false)
173+
Argument #1 is expected to be an array or a sort flag
191174

192175
--instance of classWithToString--
193-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
194-
bool(false)
176+
Argument #1 is expected to be an array or a sort flag
195177

196178
--instance of classWithoutToString--
197-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
198-
bool(false)
179+
Argument #1 is expected to be an array or a sort flag
199180

200181
--undefined var--
201-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
202-
bool(false)
182+
Argument #1 is expected to be an array or a sort flag
203183

204184
--unset var--
205-
Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
206-
bool(false)
185+
Argument #1 is expected to be an array or a sort flag
207186
===DONE===

ext/standard/tests/array/array_multisort_variation2.phpt

Lines changed: 33 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,17 @@ $inputs = array(
104104
// loop through each element of the array for SORT_REGULAR|SORT_NUMERIC|SORT_STRING|SORT_NATURAL|SORT_FLAG_CASE]]
105105

106106
foreach($inputs as $key =>$value) {
107-
echo "\n--$key--\n";
108-
var_dump( array_multisort($ar1, $value) );
107+
echo "\n--$key--\n";
108+
try {
109+
var_dump( array_multisort($ar1, $value) );
110+
} catch (Error $e) {
111+
echo $e->getMessage() . "\n";
112+
}
109113
};
110114

111115
?>
112116
===DONE===
113-
--EXPECTF--
117+
--EXPECT--
114118
*** Testing array_multisort() : usage variation ***
115119

116120
--int 0--
@@ -120,109 +124,83 @@ bool(true)
120124
bool(true)
121125

122126
--int 12345--
123-
Error: 2 - array_multisort(): Argument #2 is an unknown sort flag, %sarray_multisort_variation2.php(%d)
124-
bool(false)
127+
Argument #2 is an unknown sort flag
125128

126129
--int -12345--
127-
Error: 2 - array_multisort(): Argument #2 is an unknown sort flag, %sarray_multisort_variation2.php(%d)
128-
bool(false)
130+
Argument #2 is an unknown sort flag
129131

130132
--float 10.5--
131-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
132-
bool(false)
133+
Argument #2 is expected to be an array or a sort flag
133134

134135
--float -10.5--
135-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
136-
bool(false)
136+
Argument #2 is expected to be an array or a sort flag
137137

138138
--float 12.3456789000e10--
139-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
140-
bool(false)
139+
Argument #2 is expected to be an array or a sort flag
141140

142141
--float -12.3456789000e10--
143-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
144-
bool(false)
142+
Argument #2 is expected to be an array or a sort flag
145143

146144
--float .5--
147-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
148-
bool(false)
145+
Argument #2 is expected to be an array or a sort flag
149146

150147
--empty array--
151-
Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d)
152-
bool(false)
148+
Array sizes are inconsistent
153149

154150
--int indexed array--
155-
Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d)
156-
bool(false)
151+
Array sizes are inconsistent
157152

158153
--associative array--
159154
bool(true)
160155

161156
--nested arrays--
162-
Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d)
163-
bool(false)
157+
Array sizes are inconsistent
164158

165159
--uppercase NULL--
166-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
167-
bool(false)
160+
Argument #2 is expected to be an array or a sort flag
168161

169162
--lowercase null--
170-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
171-
bool(false)
163+
Argument #2 is expected to be an array or a sort flag
172164

173165
--lowercase true--
174-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
175-
bool(false)
166+
Argument #2 is expected to be an array or a sort flag
176167

177168
--lowercase false--
178-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
179-
bool(false)
169+
Argument #2 is expected to be an array or a sort flag
180170

181171
--uppercase TRUE--
182-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
183-
bool(false)
172+
Argument #2 is expected to be an array or a sort flag
184173

185174
--uppercase FALSE--
186-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
187-
bool(false)
175+
Argument #2 is expected to be an array or a sort flag
188176

189177
--empty string DQ--
190-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
191-
bool(false)
178+
Argument #2 is expected to be an array or a sort flag
192179

193180
--empty string SQ--
194-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
195-
bool(false)
181+
Argument #2 is expected to be an array or a sort flag
196182

197183
--string DQ--
198-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
199-
bool(false)
184+
Argument #2 is expected to be an array or a sort flag
200185

201186
--string SQ--
202-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
203-
bool(false)
187+
Argument #2 is expected to be an array or a sort flag
204188

205189
--mixed case string--
206-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
207-
bool(false)
190+
Argument #2 is expected to be an array or a sort flag
208191

209192
--heredoc--
210-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
211-
bool(false)
193+
Argument #2 is expected to be an array or a sort flag
212194

213195
--instance of classWithToString--
214-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
215-
bool(false)
196+
Argument #2 is expected to be an array or a sort flag
216197

217198
--instance of classWithoutToString--
218-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
219-
bool(false)
199+
Argument #2 is expected to be an array or a sort flag
220200

221201
--undefined var--
222-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
223-
bool(false)
202+
Argument #2 is expected to be an array or a sort flag
224203

225204
--unset var--
226-
Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
227-
bool(false)
205+
Argument #2 is expected to be an array or a sort flag
228206
===DONE===

0 commit comments

Comments
 (0)