From 07d663a5d52535ad4c637ebf3a5f14e01277dddb Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Sun, 18 Aug 2019 20:42:56 -0700 Subject: [PATCH] Use from_utf8_unchecked when we know its UTF-8 --- src/pg/types/character.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pg/types/character.rs b/src/pg/types/character.rs index 520b5f9e..4321889a 100644 --- a/src/pg/types/character.rs +++ b/src/pg/types/character.rs @@ -4,6 +4,7 @@ use crate::{ serialize::{IsNull, ToSql}, types::{AsSqlType, HasSqlType, Text}, }; +use std::str; impl HasSqlType for Pg { fn metadata() -> PgTypeMetadata { @@ -43,8 +44,15 @@ impl ToSql for String { impl FromSql for String { #[inline] fn from_sql(buf: Option<&[u8]>) -> Self { - // TODO: Handle optionals - // Using lossy here as it should be impossible to get non UTF8 data here - String::from_utf8_lossy(buf.unwrap()).into() + // TODO: Handle nulls + + let s = if cfg!(debug_assertions) { + str::from_utf8(buf.unwrap()).expect("postgres returned non UTF-8 data for TEXT") + } else { + // SAFE: Postgres is required to return UTF-8 data + unsafe { str::from_utf8_unchecked(buf.unwrap()) } + }; + + s.to_owned() } }