@@ -10,7 +10,7 @@ use std::io::util::LimitReader;
1010use time:: Timespec ;
1111
1212use PostgresResult ;
13- use error:: { PgWrongType , PgStreamError , PgWasNull } ;
13+ use error:: { PgWrongType , PgStreamError , PgWasNull , PgBadData } ;
1414use types:: array:: { Array , ArrayBase , DimensionInfo } ;
1515use types:: range:: { RangeBound , Inclusive , Exclusive , Range } ;
1616
@@ -270,7 +270,7 @@ impl RawFromSql for Vec<u8> {
270270
271271impl RawFromSql for String {
272272 fn raw_from_sql < R : Reader > ( raw : & mut R ) -> PostgresResult < String > {
273- Ok ( String :: from_utf8 ( try_pg ! ( raw. read_to_end( ) ) ) . unwrap ( ) )
273+ String :: from_utf8 ( try_pg ! ( raw. read_to_end( ) ) ) . map_err ( |_| PgBadData )
274274 }
275275}
276276
@@ -298,7 +298,10 @@ impl RawFromSql for Timespec {
298298
299299impl RawFromSql for Uuid {
300300 fn raw_from_sql < R : Reader > ( raw : & mut R ) -> PostgresResult < Uuid > {
301- Ok ( Uuid :: from_bytes ( try_pg ! ( raw. read_to_end( ) ) . as_slice ( ) ) . unwrap ( ) )
301+ match Uuid :: from_bytes ( try_pg ! ( raw. read_to_end( ) ) . as_slice ( ) ) {
302+ Some ( u) => Ok ( u) ,
303+ None => Err ( PgBadData ) ,
304+ }
302305 }
303306}
304307
@@ -356,7 +359,7 @@ from_range_impl!(Timespec)
356359
357360impl RawFromSql for Json {
358361 fn raw_from_sql < R : Reader > ( raw : & mut R ) -> PostgresResult < Json > {
359- Ok ( json:: from_reader ( raw as & mut Reader ) . unwrap ( ) )
362+ json:: from_reader ( raw) . map_err ( |_| PgBadData )
360363 }
361364}
362365
@@ -484,14 +487,20 @@ impl FromSql for Option<HashMap<String, Option<String>>> {
484487 for _ in range ( 0 , count) {
485488 let key_len = try_pg ! ( rdr. read_be_i32( ) ) ;
486489 let key = try_pg ! ( rdr. read_exact( key_len as uint) ) ;
487- let key = String :: from_utf8 ( key) . unwrap ( ) ;
490+ let key = match String :: from_utf8 ( key) {
491+ Ok ( key) => key,
492+ Err ( _) => return Err ( PgBadData ) ,
493+ } ;
488494
489495 let val_len = try_pg ! ( rdr. read_be_i32( ) ) ;
490496 let val = if val_len < 0 {
491497 None
492498 } else {
493499 let val = try_pg ! ( rdr. read_exact( val_len as uint) ) ;
494- Some ( String :: from_utf8 ( val) . unwrap ( ) )
500+ match String :: from_utf8 ( val) {
501+ Ok ( val) => Some ( val) ,
502+ Err ( _) => return Err ( PgBadData ) ,
503+ }
495504 } ;
496505
497506 map. insert ( key, val) ;
0 commit comments