pub(crate) const MAX_INT_DIGITS: usize = 4300;
pub(crate) fn over_cap_message(prefix: &str, digit_count: usize) -> String {
format!(
"{prefix}integer literal has {digit_count} digits, exceeding the {MAX_INT_DIGITS}-digit \
limit (security: unbounded-digit int-to-str conversion is superlinear)"
)
}
pub(crate) fn out_of_range_message(prefix: &str, literal: &str) -> String {
format!("{prefix}integer literal {literal:?} is out of range for a 64-bit integer")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn over_cap_message_no_prefix() {
assert_eq!(
over_cap_message("", 4301),
"integer literal has 4301 digits, exceeding the 4300-digit limit (security: \
unbounded-digit int-to-str conversion is superlinear)"
);
}
#[test]
fn over_cap_message_with_prefix() {
assert_eq!(
over_cap_message("invalid TOML: ", 4301),
"invalid TOML: integer literal has 4301 digits, exceeding the 4300-digit limit \
(security: unbounded-digit int-to-str conversion is superlinear)"
);
}
#[test]
fn out_of_range_message_no_prefix() {
assert_eq!(
out_of_range_message("", "99999999999999999999"),
"integer literal \"99999999999999999999\" is out of range for a 64-bit integer"
);
}
#[test]
fn out_of_range_message_with_prefix() {
assert_eq!(
out_of_range_message("invalid YAML: ", "99999999999999999999"),
"invalid YAML: integer literal \"99999999999999999999\" is out of range for a \
64-bit integer"
);
}
}