fix: utf8 decoding and add test to prevent it
This commit is contained in:
parent
e53650d02e
commit
832ed8170b
1 changed files with 20 additions and 2 deletions
|
|
@ -41,15 +41,33 @@ impl Encode for PgString {
|
||||||
|
|
||||||
impl Decode for PgString {
|
impl Decode for PgString {
|
||||||
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
|
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
|
||||||
let mut string = String::new();
|
let mut bytes = Vec::new();
|
||||||
loop {
|
loop {
|
||||||
let byte = u8::decode(decoder)?;
|
let byte = u8::decode(decoder)?;
|
||||||
if byte == 0 {
|
if byte == 0 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
string.push(byte as char);
|
bytes.push(byte);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let string = String::from_utf8(bytes)
|
||||||
|
.map_err(|e| DecodeError::Utf8 { inner: e.utf8_error() })?;
|
||||||
Ok(PgString(string))
|
Ok(PgString(string))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::message::primitive::data::MessageData;
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_encode_decode_utf8() {
|
||||||
|
let pg_string = PgString::from("áhój jěžkó");
|
||||||
|
let encoded = pg_string.serialize().unwrap();
|
||||||
|
let decoded: PgString = PgString::deserialize(&encoded).unwrap();
|
||||||
|
|
||||||
|
let actual = decoded.as_str();
|
||||||
|
assert_eq!("áhój jěžkó", actual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue