fix: handle invalid option numbers (#1961)

This commit is contained in:
vmobilis authored and GitHub committed 2026-09-11 23:16:39 +08:00
1 parent e95ab96997
commit 3191b23d4b
1 file changed
+14 -5
+14 -5
View File
@@ -302,8 +302,12 @@ bool parse_options(int argc, const char** argv, const std::vector<ArgOptions>& o
invalid_arg = true; invalid_arg = true;
return; return;
} }
*option.target = std::stoi(argv[i]); try {
found_arg = true; *option.target = std::stoi(argv[i]);
} catch (const std::invalid_argument&) {
invalid_arg = true;
}
found_arg = true;
})) }))
break; break;
@@ -312,8 +316,12 @@ bool parse_options(int argc, const char** argv, const std::vector<ArgOptions>& o
invalid_arg = true; invalid_arg = true;
return; return;
} }
*option.target = std::stof(argv[i]); try {
found_arg = true; *option.target = std::stof(argv[i]);
} catch (const std::invalid_argument&) {
invalid_arg = true;
}
found_arg = true;
})) }))
break; break;
@@ -337,7 +345,8 @@ bool parse_options(int argc, const char** argv, const std::vector<ArgOptions>& o
if (invalid_arg) { if (invalid_arg) {
if (!valid) { if (!valid) {
LOG_ERROR("error: invalid parameter for argument: %s", arg.c_str()); LOG_ERROR("error: invalid parameter for argument \"%s\": \"%s\"",
arg.c_str(), (i >= argc) ? "" : argv[i]);
} }
return false; return false;
} }