Correctness: Wire format conversion can silently drop fields #107

Open
opened 2026-05-11 13:50:39 +00:00 by thabeta · 0 comments
Owner

Severity: Medium

Location

crates/hero_aibroker_lib/src/service/wire.rs

Finding

The wire format conversion between OpenAI and OpenRouter shapes uses partial deserialization:

// Fields not in the target struct are silently dropped\n// When converting OpenRouter → OpenAI shape\n// extra_body, provider preferences, and reasoning params may be lost\n```

## Impact
- OpenRouter-specific features (reasoning, transforms) silently dropped
- Client sends parameters that are ignored
- No warning about unsupported features
- Data loss in protocol conversion

## Recommendation
- Use `#[serde(deny_unknown_fields)]` during conversion to detect dropped fields
- Log warnings when fields are dropped
- Preserve unknown fields in a passthrough bag
## Severity: Medium ## Location `crates/hero_aibroker_lib/src/service/wire.rs` ## Finding The wire format conversion between OpenAI and OpenRouter shapes uses partial deserialization: ```rust // Fields not in the target struct are silently dropped\n// When converting OpenRouter → OpenAI shape\n// extra_body, provider preferences, and reasoning params may be lost\n``` ## Impact - OpenRouter-specific features (reasoning, transforms) silently dropped - Client sends parameters that are ignored - No warning about unsupported features - Data loss in protocol conversion ## Recommendation - Use `#[serde(deny_unknown_fields)]` during conversion to detect dropped fields - Log warnings when fields are dropped - Preserve unknown fields in a passthrough bag
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_aibroker#107
No description provided.