生成图片的 gridX/gridY 解析不再把超大整数截断成合法网格
- generate_image_grid_axis 原来用 `value as u32`,u64 直接截断:4294967297(2^32+1)会变成 1,随后 1..=32 的区间校验把这个巨大输入当成合法网格静默接受 - 改成 u32::try_from,超出 u32 的值直接落到 GridAxisNotInteger 拒绝分支,不再依赖截断后的值 - 补一条回归测试:gridX=4294967297 必须被拒绝,gridX=4/gridY=4 仍通过 验证:cargo test --bin genarrative-ai-game-creator-shell -- agent::direct_tool_bridge::tests::generate_image_grid_axis_rejects_values_beyond_u32 通过
This commit is contained in:
@@ -2850,7 +2850,8 @@ fn generate_image_grid_axis(
|
||||
};
|
||||
value
|
||||
.as_u64()
|
||||
.map(|value| Some(value as u32))
|
||||
.and_then(|value| u32::try_from(value).ok())
|
||||
.map(Some)
|
||||
.ok_or(GenerateImageError::GridAxisNotInteger { axis })
|
||||
}
|
||||
|
||||
@@ -4772,6 +4773,30 @@ mod tests {
|
||||
.is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generate_image_grid_axis_rejects_values_beyond_u32() {
|
||||
let error = match generate_image_input(&json!({
|
||||
"prompt": "像素风图标集",
|
||||
"kind": "icon-spritesheet",
|
||||
"sliceMode": "grid",
|
||||
"gridX": 4_294_967_297_u64,
|
||||
"gridY": 1
|
||||
})) {
|
||||
Ok(_) => panic!("gridX 超过 u32 时不得截断成合法网格"),
|
||||
Err(error) => error,
|
||||
}
|
||||
.to_user_msg();
|
||||
assert!(error.contains("gridX"), "{error}");
|
||||
assert!(generate_image_input(&json!({
|
||||
"prompt": "像素风图标集",
|
||||
"kind": "icon-spritesheet",
|
||||
"sliceMode": "grid",
|
||||
"gridX": 4,
|
||||
"gridY": 4
|
||||
}))
|
||||
.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn large_mcp_images_are_reduced_to_bounded_jpeg_previews() {
|
||||
let image = image::RgbaImage::from_fn(1600, 1200, |x, y| {
|
||||
|
||||
Reference in New Issue
Block a user