bxctl: escape frame errors; say the outcome is unknown after a timeout
From the independent review of task 23. serde quotes a bad frame's text after decoding, so a compromised peer could put escape sequences in it. A timed-out admin request now says whether brokerd acted is unknown, since it may have. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -55,3 +55,21 @@ fn an_error_detail_is_escaped_in_chat_and_admin_errors() {
|
||||
assert!(text.contains("\\u202e"), "{text}");
|
||||
}
|
||||
}
|
||||
|
||||
/// A frame that does not decode is reported with serde's message, which quotes the offending
|
||||
/// text after JSON decoding: from a compromised peer that can be raw escape sequences.
|
||||
#[test]
|
||||
fn a_frame_error_is_escaped() {
|
||||
let bad = r#"{"v":1,"id":1,"final":true,"msg":{"kind":"\u001b[2J\u202e"}}"#;
|
||||
let error = serde_json::from_str::<proto::Envelope>(bad).unwrap_err();
|
||||
for text in [
|
||||
ChatError::Frame(proto::FrameError::Json(
|
||||
serde_json::from_str::<proto::Envelope>(bad).unwrap_err(),
|
||||
))
|
||||
.to_string(),
|
||||
AdminError::Frame(proto::FrameError::Json(error)).to_string(),
|
||||
] {
|
||||
clean(&text);
|
||||
assert!(text.contains("\\u001b"), "{text}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user