Skip to content

Commit 521b75e

Browse files
authored
cli: avoid panic when -X int_max_str_digits has no value (#8677)
Signed-off-by: cuishuang <imcusg@gmail.com>
1 parent fb88ea8 commit 521b75e

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import subprocess
2+
import sys
3+
4+
for option in (
5+
"int_max_str_digits",
6+
"int_max_str_digits=639",
7+
"int_max_str_digits=invalid",
8+
):
9+
result = subprocess.run(
10+
[sys.executable, "-E", "-X", option, "-c", "pass"],
11+
stdout=subprocess.PIPE,
12+
stderr=subprocess.PIPE,
13+
)
14+
assert result.returncode == 1, (option, result.returncode, result.stderr)
15+
assert b"-X int_max_str_digits: invalid limit" in result.stderr, (
16+
option,
17+
result.stderr,
18+
)
19+
assert b"panicked" not in result.stderr, (option, result.stderr)
20+
21+
for digits in (640, 0):
22+
result = subprocess.run(
23+
[
24+
sys.executable,
25+
"-E",
26+
"-X",
27+
f"int_max_str_digits={digits}",
28+
"-c",
29+
"import sys; print(sys.get_int_max_str_digits())",
30+
],
31+
stdout=subprocess.PIPE,
32+
stderr=subprocess.PIPE,
33+
)
34+
assert result.returncode == 0, (digits, result.returncode, result.stderr)
35+
assert result.stdout.strip() == str(digits).encode(), (digits, result.stdout)

‎src/settings.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,8 @@ pub fn parse_opts() -> Result<(Settings, RunMode), lexopt::Error> {
339339
};
340340
}
341341
"int_max_str_digits" => {
342-
settings.int_max_str_digits = match value.unwrap().parse() {
343-
Ok(digits) if digits == 0 || digits >= 640 => digits,
342+
settings.int_max_str_digits = match value.and_then(|value| value.parse().ok()) {
343+
Some(digits) if digits == 0 || digits >= 640 => digits,
344344
_ => {
345345
error!(
346346
"Fatal Python error: config_init_int_max_str_digits: \

0 commit comments

Comments
 (0)