fix(postgres): don't panic if M or C Notice fields are not UTF-8 (#3346)

* fix(postgres): don't panic if `M` or `C` Notice fields are not UTF-8

This has been observed with an old version of PostgreSQL (11.0.4)
running on Windows Server 2016 with windows-1252 encoding and French
locale.

This change replaces invalid UTF-8 fields with a default string, so the
other fields can still be read if they are valid.

* Revert "fix(postgres): don't panic if `M` or `C` Notice fields are not UTF-8"

This reverts commit 362ca98bbdfef14f7f85f53e6d12fdcd8120ea22.

* Check that Notice M and C fields are valid UTF-8

Otherwise, we return the invalid UTF-8 error to avoid panicking later.
This commit is contained in:
YgorSouza 2024-07-16 09:27:20 +02:00 committed by GitHub
parent 83a7d14e58
commit f2f17a7bc5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -153,13 +153,19 @@ impl Decode<'_> for Notice {
}
b'M' => {
_ = from_utf8(&buf[v.0 as usize..v.1 as usize])
.map_err(|_| notice_protocol_err())?;
message = v;
}
b'C' => {
_ = from_utf8(&buf[v.0 as usize..v.1 as usize])
.map_err(|_| notice_protocol_err())?;
code = v;
}
// If more fields are added, make sure to check that they are valid UTF-8,
// otherwise the get_cached_str method will panic.
_ => {}
}
}