From 34696381c588d43888f91aea6aa97a24a1ac5780 Mon Sep 17 00:00:00 2001 From: Conrad Ludgate Date: Fri, 13 Sep 2024 09:40:51 +0100 Subject: [PATCH] fix pg raw decoding --- proxy/src/bin/pglb.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/proxy/src/bin/pglb.rs b/proxy/src/bin/pglb.rs index b7e4a02dd5..c4f9d5d5b8 100644 --- a/proxy/src/bin/pglb.rs +++ b/proxy/src/bin/pglb.rs @@ -590,30 +590,30 @@ impl PgRawMessage { src.reserve(4); return Ok(None); } - let length = src.get_u32() as usize - 4; + let length = u32::from_be_bytes(src[0..4].try_into().unwrap()) as usize; if src.remaining() < length { src.reserve(length - src.remaining()); return Ok(None); } - if length == 4 && src.starts_with(&80877103u32.to_be_bytes()) { + if length == 8 && src[4..8] == 80877103u32.to_be_bytes() { Ok(Some(PgRawMessage::SslRequest)) } else { - Ok(Some(PgRawMessage::Start(src.split_off(length).to_vec()))) + Ok(Some(PgRawMessage::Start(src.split_to(length).to_vec()))) } } else { if src.remaining() < 5 { src.reserve(5); return Ok(None); } - let tag = src.get_u8(); - let length = src.get_u32() as usize - 4; + let tag = src[0]; + let length = u32::from_be_bytes(src[1..5].try_into().unwrap()) as usize - 1; if src.remaining() < length { src.reserve(length - src.remaining()); return Ok(None); } Ok(Some(PgRawMessage::Generic { tag, - payload: src.split_off(length).to_vec(), + payload: src.split_to(length).to_vec(), })) } }