rfb: keep failure_reason as Vec<u8>

And log it with from_utf8_lossy

Since we may now cut a too big failure_reason breaking a valid
utf-8 string

Ticket: 8731
(cherry picked from commit c608165c04)
pull/16202/head
Philippe Antoine 2 months ago committed by Victor Julien
parent 51a6e69b4e
commit 6c204270db

@ -81,7 +81,10 @@ fn log_rfb(tx: &RFBTransaction, js: &mut JsonBuilder) -> Result<(), JsonError> {
js.close()?; // Close authentication.
if let Some(ref reason) = tx.tc_failure_reason {
js.set_string("server_security_failure_reason", &reason.reason_string)?;
js.set_string(
"server_security_failure_reason",
&String::from_utf8_lossy(&reason.reason_string),
)?;
}
// Client/Server init

@ -93,7 +93,7 @@ pub struct SecurityResult {
}
pub struct FailureReason {
pub reason_string: String,
pub reason_string: Vec<u8>,
pub to_skip: u32,
}
@ -182,11 +182,11 @@ pub fn parse_security_result(i: &[u8]) -> IResult<&[u8], SecurityResult> {
pub fn parse_failure_reason(i: &[u8], max_len: u32) -> IResult<&[u8], FailureReason> {
let (i, reason_length) = be_u32(i)?;
let to_skip = reason_length.saturating_sub(max_len);
let (i, reason_string) = map_res(take((reason_length - to_skip) as usize), str::from_utf8)(i)?;
let (i, reason_string) = take((reason_length - to_skip) as usize)(i)?;
Ok((
i,
FailureReason {
reason_string: reason_string.to_string(),
reason_string: reason_string.to_vec(),
to_skip,
},
))

Loading…
Cancel
Save