From 521b75ec4ab5f98032ea5f1079751a4223417ad1 Mon Sep 17 00:00:00 2001 From: cui fliter Date: Thu, 10 Sep 2026 21:38:19 +0800 Subject: [PATCH] cli: avoid panic when -X int_max_str_digits has no value (#8677) Signed-off-by: cuishuang --- .../snippets/cli_int_max_str_digits.py | 35 +++++++++++++++++++ src/settings.rs | 4 +-- 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 extra_tests/snippets/cli_int_max_str_digits.py diff --git a/extra_tests/snippets/cli_int_max_str_digits.py b/extra_tests/snippets/cli_int_max_str_digits.py new file mode 100644 index 000000000..4ef2c7dea --- /dev/null +++ b/extra_tests/snippets/cli_int_max_str_digits.py @@ -0,0 +1,35 @@ +import subprocess +import sys + +for option in ( + "int_max_str_digits", + "int_max_str_digits=639", + "int_max_str_digits=invalid", +): + result = subprocess.run( + [sys.executable, "-E", "-X", option, "-c", "pass"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + assert result.returncode == 1, (option, result.returncode, result.stderr) + assert b"-X int_max_str_digits: invalid limit" in result.stderr, ( + option, + result.stderr, + ) + assert b"panicked" not in result.stderr, (option, result.stderr) + +for digits in (640, 0): + result = subprocess.run( + [ + sys.executable, + "-E", + "-X", + f"int_max_str_digits={digits}", + "-c", + "import sys; print(sys.get_int_max_str_digits())", + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + assert result.returncode == 0, (digits, result.returncode, result.stderr) + assert result.stdout.strip() == str(digits).encode(), (digits, result.stdout) diff --git a/src/settings.rs b/src/settings.rs index ed443eaf6..254386da3 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -339,8 +339,8 @@ pub fn parse_opts() -> Result<(Settings, RunMode), lexopt::Error> { }; } "int_max_str_digits" => { - settings.int_max_str_digits = match value.unwrap().parse() { - Ok(digits) if digits == 0 || digits >= 640 => digits, + settings.int_max_str_digits = match value.and_then(|value| value.parse().ok()) { + Some(digits) if digits == 0 || digits >= 640 => digits, _ => { error!( "Fatal Python error: config_init_int_max_str_digits: \