reject empty base64 image inputs

This commit is contained in:
Roy Han
2026-05-24 20:17:37 -07:00
parent 03e6c5f600
commit b88e4ec7bc
7 changed files with 238 additions and 24 deletions
@@ -124,6 +124,48 @@ fn map_api_error_keeps_unknown_400_errors_generic() {
assert_eq!(message, body);
}
#[test]
fn map_api_error_maps_empty_base64_image_error_message() {
const EMPTY_IMAGE_MESSAGE: &str = "Expected a base64-encoded data URL with an image MIME type \
(e.g. 'data:image/png;base64,aW1nIGJ5dGVzIGhlcmU='), but got empty base64-encoded bytes.";
let cases = [
("input[0].content[2].image_url", EMPTY_IMAGE_MESSAGE, true),
("input[111].output[1].image_url", EMPTY_IMAGE_MESSAGE, true),
("input[0].name", "Expected a valid tool name.", false),
];
for (param, message, maps_to_invalid_image) in cases {
let body = serde_json::json!({
"error": {
"type": "invalid_request_error",
"code": "invalid_value",
"message": format!("Invalid '{param}'. {message}"),
"param": param
}
})
.to_string();
let err = map_api_error(ApiError::Transport(TransportError::Http {
status: http::StatusCode::BAD_REQUEST,
url: Some("http://example.com/v1/responses".to_string()),
headers: None,
body: Some(body.clone()),
}));
if maps_to_invalid_image {
assert!(
matches!(err, CodexErr::InvalidImageRequest()),
"expected InvalidImageRequest for {param}, got {err:?}"
);
} else {
let CodexErr::InvalidRequest(message) = err else {
panic!("expected CodexErr::InvalidRequest for {param}, got {err:?}");
};
assert_eq!(message, body);
}
}
}
#[test]
fn map_api_error_maps_usage_limit_limit_name_header() {
let mut headers = HeaderMap::new();