Skip to content

Commit 65f14b0

Browse files
committed
Throw ValueError instead of TypeError for malformed GMP number
If the passed argument has correct type (string) but does not have a well-formed value, throw ValueError instead of TypeError. Closes GH-6572.
1 parent abe23bd commit 65f14b0

19 files changed

+60
-60
lines changed

ext/gmp/gmp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ static zend_result convert_to_gmp(mpz_t gmpnumber, zval *val, zend_long base, ui
614614
"Cannot convert variable to GMP, it is not an integer string");
615615
return FAILURE;
616616
}
617-
zend_argument_type_error(arg_pos, "is not an integer string");
617+
zend_argument_value_error(arg_pos, "is not an integer string");
618618
return FAILURE;
619619
}
620620

ext/gmp/tests/003.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Check for number base recognition
2525
$test[] = gmp_init("0x4d2", 16);
2626
try {
2727
$test[] = gmp_init("4d2");
28-
} catch (\TypeError $e) {
28+
} catch (\ValueError $e) {
2929
echo $e->getMessage() . \PHP_EOL;
3030
}
3131
$test[] = gmp_init("4d2", 16);

ext/gmp/tests/bug66872.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Bug #66872: Crash when passing string to gmp_testbit
77

88
try {
99
var_dump(gmp_testbit("abc", 1));
10-
} catch (\TypeError $e) {
10+
} catch (\ValueError $e) {
1111
echo $e->getMessage() . \PHP_EOL;
1212
}
1313

ext/gmp/tests/bug80560.phpt

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,23 @@ $functions1 = [
1515
'gmp_fact',
1616
'gmp_sqrt',
1717
'gmp_sqrtrem',
18-
'gmp_root',
19-
'gmp_rootrem',
20-
'gmp_pow',
2118
'gmp_perfect_square',
2219
'gmp_perfect_power',
2320
'gmp_prob_prime',
2421
'gmp_sign',
2522
'gmp_random_seed',
2623
'gmp_popcount',
2724
'gmp_com',
25+
'gmp_nextprime',
2826
];
2927
$functions1_need_int_2 = [
3028
'gmp_testbit',
3129
'gmp_scan0',
3230
'gmp_scan1',
3331
'gmp_binomial',
32+
'gmp_root',
33+
'gmp_rootrem',
34+
'gmp_pow',
3435
];
3536
$functions2 = [
3637
'gmp_add',
@@ -55,7 +56,6 @@ $functions2 = [
5556
'gmp_or',
5657
'gmp_xor',
5758
'gmp_hamdist',
58-
'gmp_nextprime',
5959
];
6060
$functions3 = [
6161
'gmp_powm',
@@ -65,24 +65,24 @@ echo 'Explicit base with gmp_init:', \PHP_EOL;
6565
echo 'Hexadecimal', \PHP_EOL;
6666
try {
6767
var_dump(gmp_init('0X', 16));
68-
} catch (\TypeError $e) {
68+
} catch (\ValueError $e) {
6969
echo $e->getMessage(), \PHP_EOL;
7070
}
7171
try {
7272
var_dump(gmp_init('0x', 16));
73-
} catch (\TypeError $e) {
73+
} catch (\ValueError $e) {
7474
echo $e->getMessage(), \PHP_EOL;
7575
}
7676

7777
echo 'Binary', \PHP_EOL;
7878
try {
7979
var_dump(gmp_init('0B', 2));
80-
} catch (\TypeError $e) {
80+
} catch (\ValueError $e) {
8181
echo $e->getMessage(), \PHP_EOL;
8282
}
8383
try {
8484
var_dump(gmp_init('0b', 2));
85-
} catch (\TypeError $e) {
85+
} catch (\ValueError $e) {
8686
echo $e->getMessage(), \PHP_EOL;
8787
}
8888

@@ -91,121 +91,121 @@ foreach ($functions1 as $function) {
9191
try {
9292
$function('0B');
9393
echo $function, ' failed with 0B', \PHP_EOL;
94-
} catch (\TypeError) { }
94+
} catch (\ValueError) { }
9595
try {
9696
$function('0b');
9797
echo $function, ' failed with 0b', \PHP_EOL;
98-
} catch (\TypeError) { }
98+
} catch (\ValueError) { }
9999
try {
100100
$function('0X');
101101
echo $function, ' failed with 0X', \PHP_EOL;
102-
} catch (\TypeError) { }
102+
} catch (\ValueError) { }
103103
try {
104104
$function('0x');
105105
echo $function, ' failed with 0x', \PHP_EOL;
106-
} catch (\TypeError) { }
106+
} catch (\ValueError) { }
107107
}
108108
foreach ($functions1_need_int_2 as $function) {
109109
try {
110110
$function('0B', 1);
111111
echo $function, ' failed with 0B', \PHP_EOL;
112-
} catch (\TypeError) { }
112+
} catch (\ValueError) { }
113113
try {
114114
$function('0b', 1);
115115
echo $function, ' failed with 0b', \PHP_EOL;
116-
} catch (\TypeError) { }
116+
} catch (\ValueError) { }
117117
try {
118118
$function('0X', 1);
119119
echo $function, ' failed with 0X', \PHP_EOL;
120-
} catch (\TypeError) { }
120+
} catch (\ValueError) { }
121121
try {
122122
$function('0x', 1);
123123
echo $function, ' failed with 0x', \PHP_EOL;
124-
} catch (\TypeError) { }
124+
} catch (\ValueError) { }
125125
}
126126
foreach ($functions2 as $function) {
127127
try {
128128
$function('0B', 1);
129129
echo $function, ' arg 1 failed with 0B', \PHP_EOL;
130-
} catch (\TypeError) { }
130+
} catch (\ValueError) { }
131131
try {
132132
$function('0b', 1);
133133
echo $function, ' arg 1 failed with 0b', \PHP_EOL;
134-
} catch (\TypeError) { }
134+
} catch (\ValueError) { }
135135
try {
136136
$function('0X', 1);
137137
echo $function, ' arg 1 failed with 0X', \PHP_EOL;
138-
} catch (\TypeError) { }
138+
} catch (\ValueError) { }
139139
try {
140140
$function('0x', 1);
141141
echo $function, ' arg 1 failed with 0x', \PHP_EOL;
142-
} catch (\TypeError) { }
142+
} catch (\ValueError) { }
143143
try {
144144
$function(1, '0B');
145145
echo $function, ' arg 2 failed with 0B', \PHP_EOL;
146-
} catch (\TypeError) { }
146+
} catch (\ValueError) { }
147147
try {
148148
$function(1, '0b');
149149
echo $function, ' arg 2 failed with 0b', \PHP_EOL;
150-
} catch (\TypeError) { }
150+
} catch (\ValueError) { }
151151
try {
152152
$function(1, '0X');
153153
echo $function, ' arg 2 failed with 0X', \PHP_EOL;
154-
} catch (\TypeError) { }
154+
} catch (\ValueError) { }
155155
try {
156156
$function(1, '0x');
157157
echo $function, ' arg 2 failed with 0x', \PHP_EOL;
158-
} catch (\TypeError) { }
158+
} catch (\ValueError) { }
159159
}
160160
foreach ($functions3 as $function) {
161161
try {
162162
$function('0B', 1, 1);
163163
echo $function, ' arg 1 failed with 0B', \PHP_EOL;
164-
} catch (\TypeError) { }
164+
} catch (\ValueError) { }
165165
try {
166166
$function('0b', 1, 1);
167167
echo $function, ' arg 1 failed with 0b', \PHP_EOL;
168-
} catch (\TypeError) { }
168+
} catch (\ValueError) { }
169169
try {
170170
$function('0X', 1, 1);
171171
echo $function, ' arg 1 failed with 0X', \PHP_EOL;
172-
} catch (\TypeError) { }
172+
} catch (\ValueError) { }
173173
try {
174174
$function('0x', 1, 1);
175175
echo $function, ' arg 1 failed with 0x', \PHP_EOL;
176-
} catch (\TypeError) { }
176+
} catch (\ValueError) { }
177177
try {
178178
$function(1, '0B', 1);
179179
echo $function, ' arg 2 failed with 0B', \PHP_EOL;
180-
} catch (\TypeError) { }
180+
} catch (\ValueError) { }
181181
try {
182182
$function(1, '0b', 1);
183183
echo $function, ' arg 2 failed with 0b', \PHP_EOL;
184-
} catch (\TypeError) { }
184+
} catch (\ValueError) { }
185185
try {
186186
$function(1, '0X', 1);
187187
echo $function, ' arg 2 failed with 0X', \PHP_EOL;
188-
} catch (\TypeError) { }
188+
} catch (\ValueError) { }
189189
try {
190190
$function(1, '0x', 1);
191191
echo $function, ' arg 2 failed with 0x', \PHP_EOL;
192-
} catch (\TypeError) { }
192+
} catch (\ValueError) { }
193193
try {
194194
$function(1, 1, '0B');
195195
echo $function, ' arg 3 failed with 0B', \PHP_EOL;
196-
} catch (\TypeError) { }
196+
} catch (\ValueError) { }
197197
try {
198198
$function(1, 1, '0b');
199199
echo $function, ' arg 3 failed with 0b', \PHP_EOL;
200-
} catch (\TypeError) { }
200+
} catch (\ValueError) { }
201201
try {
202202
$function(1, 1, '0X');
203203
echo $function, ' arg 3 failed with 0X', \PHP_EOL;
204-
} catch (\TypeError) { }
204+
} catch (\ValueError) { }
205205
try {
206206
$function(1, 1, '0x');
207207
echo $function, ' arg 3 failed with 0x', \PHP_EOL;
208-
} catch (\TypeError) { }
208+
} catch (\ValueError) { }
209209
}
210210

211211
echo "Done\n";

ext/gmp/tests/gmp_abs.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ gmp_abs() basic tests
77

88
try {
99
var_dump(gmp_strval(gmp_abs("")));
10-
} catch (\TypeError $e) {
10+
} catch (\ValueError $e) {
1111
echo $e->getMessage() . \PHP_EOL;
1212
}
1313
var_dump(gmp_strval(gmp_abs("0")));
@@ -24,13 +24,13 @@ var_dump(gmp_strval(gmp_abs("0000")));
2424
try {
2525
// Base 8
2626
var_dump(gmp_strval(gmp_abs("09876543")));
27-
} catch (\TypeError $e) {
27+
} catch (\ValueError $e) {
2828
echo $e->getMessage() . \PHP_EOL;
2929
}
3030
try {
3131
// Base 8
3232
var_dump(gmp_strval(gmp_abs("-099987654")));
33-
} catch (\TypeError $e) {
33+
} catch (\ValueError $e) {
3434
echo $e->getMessage() . \PHP_EOL;
3535
}
3636

ext/gmp/tests/gmp_and.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var_dump(gmp_strval(gmp_and(4545, -20)));
1313

1414
try {
1515
var_dump(gmp_strval(gmp_and("test", "no test")));
16-
} catch (\TypeError $e) {
16+
} catch (\ValueError $e) {
1717
echo $e->getMessage() . \PHP_EOL;
1818
}
1919

ext/gmp/tests/gmp_com.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var_dump(gmp_strval(gmp_com(0)));
99
var_dump(gmp_strval(gmp_com("0")));
1010
try {
1111
var_dump(gmp_strval(gmp_com("test")));
12-
} catch (\TypeError $e) {
12+
} catch (\ValueError $e) {
1313
echo $e->getMessage() . \PHP_EOL;
1414
}
1515
var_dump(gmp_strval(gmp_com("2394876545678")));

ext/gmp/tests/gmp_fact.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ gmp_fact() basic tests
88
var_dump(gmp_strval(gmp_fact(0)));
99
try {
1010
var_dump(gmp_strval(gmp_fact("")));
11-
} catch (\TypeError $e) {
11+
} catch (\ValueError $e) {
1212
echo $e->getMessage() . \PHP_EOL;
1313
}
1414
var_dump(gmp_strval(gmp_fact("0")));

ext/gmp/tests/gmp_init.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ try {
1515

1616
try {
1717
var_dump(gmp_init("",36));
18-
} catch (\TypeError $e) {
18+
} catch (\ValueError $e) {
1919
echo $e->getMessage() . \PHP_EOL;
2020
}
2121
try {
2222
var_dump(gmp_init("foo",3));
23-
} catch (\TypeError $e) {
23+
} catch (\ValueError $e) {
2424
echo $e->getMessage() . \PHP_EOL;
2525
}
2626
try {
2727
var_dump(gmp_strval(gmp_init("993247326237679187178",3)));
28-
} catch (\TypeError $e) {
28+
} catch (\ValueError $e) {
2929
echo $e->getMessage() . \PHP_EOL;
3030
}
3131

ext/gmp/tests/gmp_intval.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var_dump(gmp_intval($g));
1616

1717
try {
1818
var_dump(gmp_intval(""));
19-
} catch (TypeError $e) {
19+
} catch (ValueError $e) {
2020
echo $e->getMessage(), "\n";
2121
}
2222
try {
@@ -31,7 +31,7 @@ try {
3131
}
3232
try {
3333
var_dump(gmp_intval("1.0001"));
34-
} catch (TypeError $e) {
34+
} catch (ValueError $e) {
3535
echo $e->getMessage(), "\n";
3636
}
3737

ext/gmp/tests/gmp_mod.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ gmp_mod tests()
77

88
try {
99
var_dump(gmp_mod("",""));
10-
} catch (\TypeError $e) {
10+
} catch (\ValueError $e) {
1111
echo $e->getMessage() . \PHP_EOL;
1212
}
1313
var_dump(gmp_mod(0,1));

ext/gmp/tests/gmp_neg.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var_dump(gmp_intval(gmp_neg("-1")));
1212

1313
try {
1414
var_dump(gmp_intval(gmp_neg("")));
15-
} catch (\TypeError $e) {
15+
} catch (\ValueError $e) {
1616
echo $e->getMessage() . \PHP_EOL;
1717
}
1818

ext/gmp/tests/gmp_nextprime.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ try {
2525
try {
2626
$n = gmp_nextprime("");
2727
var_dump(gmp_strval($n));
28-
} catch (\TypeError $e) {
28+
} catch (\ValueError $e) {
2929
echo $e->getMessage() . \PHP_EOL;
3030
}
3131
try {

ext/gmp/tests/gmp_or.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var_dump(gmp_strval(gmp_or(4545, -20)));
1313

1414
try {
1515
var_dump(gmp_strval(gmp_or("test", "no test")));
16-
} catch (\TypeError $e) {
16+
} catch (\ValueError $e) {
1717
echo $e->getMessage() . \PHP_EOL;
1818
}
1919

ext/gmp/tests/gmp_random_seed.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ var_dump(gmp_strval(gmp_random_range(-10000, 0)));
108108
// standard non conversion error
109109
try {
110110
var_dump(gmp_random_seed('not a number'));
111-
} catch (\TypeError $e) {
111+
} catch (\ValueError $e) {
112112
echo $e->getMessage() . \PHP_EOL;
113113
}
114114

ext/gmp/tests/gmp_sign.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ var_dump(gmp_sign("-34535345345"));
1313

1414
try {
1515
var_dump(gmp_sign("+34534573457345"));
16-
} catch (\TypeError $e) {
16+
} catch (\ValueError $e) {
1717
echo $e->getMessage() . \PHP_EOL;
1818
}
1919
try {
2020
$n = gmp_init("098909878976786545");
2121
var_dump(gmp_sign($n));
22-
} catch (\TypeError $e) {
22+
} catch (\ValueError $e) {
2323
echo $e->getMessage() . \PHP_EOL;
2424
}
2525
try {

0 commit comments

Comments
 (0)