From 6c204270db815d639582c3be16f7797017dcde81 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Thu, 23 Jul 2026 16:07:06 +0200 Subject: [PATCH] rfb: keep failure_reason as Vec 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 c608165c043ba9a4f96a2679d5bae5de1ef1d6cb) --- rust/src/rfb/logger.rs | 5 ++++- rust/src/rfb/parser.rs | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/rust/src/rfb/logger.rs b/rust/src/rfb/logger.rs index 9934aae057..d677bef694 100644 --- a/rust/src/rfb/logger.rs +++ b/rust/src/rfb/logger.rs @@ -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 diff --git a/rust/src/rfb/parser.rs b/rust/src/rfb/parser.rs index 210571fd1b..2f8cbb52dd 100644 --- a/rust/src/rfb/parser.rs +++ b/rust/src/rfb/parser.rs @@ -93,7 +93,7 @@ pub struct SecurityResult { } pub struct FailureReason { - pub reason_string: String, + pub reason_string: Vec, 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, }, ))