@@ -495,10 +495,10 @@ impl SecurityState {
495
495
} ;
496
496
let reader = env_and_store. env . read ( ) ?;
497
497
match env_and_store. store . get ( & reader, key) {
498
- Ok ( Some ( Value :: I64 ( i) ) )
499
- if i <= ( std :: i16 :: MAX as i64 ) && i >= ( std :: i16 :: MIN as i64 ) =>
500
- {
501
- Ok ( Some ( i as i16 ) )
498
+ Ok ( Some ( Value :: I64 ( i) ) ) => {
499
+ Ok ( Some ( i . try_into ( ) . map_err ( |_| {
500
+ SecurityStateError :: from ( "Stored value out of range for i16" )
501
+ } ) ? ) )
502
502
}
503
503
Ok ( None ) => Ok ( None ) ,
504
504
Ok ( _) => Err ( SecurityStateError :: from (
@@ -1034,10 +1034,10 @@ struct Cert<'a> {
1034
1034
1035
1035
impl < ' a > Cert < ' a > {
1036
1036
fn new ( der : & ' a [ u8 ] , subject : & ' a [ u8 ] , trust : i16 ) -> Result < Cert < ' a > , SecurityStateError > {
1037
- if der. len ( ) > u16:: max as usize {
1037
+ if der. len ( ) > u16:: MAX . into ( ) {
1038
1038
return Err ( SecurityStateError :: from ( "certificate is too long" ) ) ;
1039
1039
}
1040
- if subject. len ( ) > u16:: max as usize {
1040
+ if subject. len ( ) > u16:: MAX . into ( ) {
1041
1041
return Err ( SecurityStateError :: from ( "subject is too long" ) ) ;
1042
1042
}
1043
1043
Ok ( Cert {
@@ -1061,7 +1061,7 @@ impl<'a> Cert<'a> {
1061
1061
return Err ( SecurityStateError :: from ( "invalid Cert: no der len?" ) ) ;
1062
1062
}
1063
1063
let ( mut der_len, rest) = rest. split_at ( size_of :: < u16 > ( ) ) ;
1064
- let der_len = der_len. read_u16 :: < NetworkEndian > ( ) ? as usize ;
1064
+ let der_len = der_len. read_u16 :: < NetworkEndian > ( ) ?. into ( ) ;
1065
1065
if rest. len ( ) < der_len {
1066
1066
return Err ( SecurityStateError :: from ( "invalid Cert: no der?" ) ) ;
1067
1067
}
@@ -1071,7 +1071,7 @@ impl<'a> Cert<'a> {
1071
1071
return Err ( SecurityStateError :: from ( "invalid Cert: no subject len?" ) ) ;
1072
1072
}
1073
1073
let ( mut subject_len, rest) = rest. split_at ( size_of :: < u16 > ( ) ) ;
1074
- let subject_len = subject_len. read_u16 :: < NetworkEndian > ( ) ? as usize ;
1074
+ let subject_len = subject_len. read_u16 :: < NetworkEndian > ( ) ?. into ( ) ;
1075
1075
if rest. len ( ) < subject_len {
1076
1076
return Err ( SecurityStateError :: from ( "invalid Cert: no subject?" ) ) ;
1077
1077
}
@@ -1102,15 +1102,19 @@ impl<'a> Cert<'a> {
1102
1102
+ size_of :: < i16 > ( ) ,
1103
1103
) ;
1104
1104
bytes. write_u8 ( CERT_SERIALIZATION_VERSION_1 ) ?;
1105
- if self . der . len ( ) > u16:: max as usize {
1106
- return Err ( SecurityStateError :: from ( "certificate is too long" ) ) ;
1107
- }
1108
- bytes. write_u16 :: < NetworkEndian > ( self . der . len ( ) as u16 ) ?;
1105
+ bytes. write_u16 :: < NetworkEndian > (
1106
+ self . der
1107
+ . len ( )
1108
+ . try_into ( )
1109
+ . map_err ( |_| SecurityStateError :: from ( "certificate is too long" ) ) ?,
1110
+ ) ?;
1109
1111
bytes. extend_from_slice ( & self . der ) ;
1110
- if self . subject . len ( ) > u16:: max as usize {
1111
- return Err ( SecurityStateError :: from ( "subject is too long" ) ) ;
1112
- }
1113
- bytes. write_u16 :: < NetworkEndian > ( self . subject . len ( ) as u16 ) ?;
1112
+ bytes. write_u16 :: < NetworkEndian > (
1113
+ self . subject
1114
+ . len ( )
1115
+ . try_into ( )
1116
+ . map_err ( |_| SecurityStateError :: from ( "subject is too long" ) ) ?,
1117
+ ) ?;
1114
1118
bytes. extend_from_slice ( & self . subject ) ;
1115
1119
bytes. write_i16 :: < NetworkEndian > ( self . trust ) ?;
1116
1120
Ok ( bytes)
@@ -1324,7 +1328,7 @@ fn load_crlite_stash_from_reader_into_map(
1324
1328
let issuer_spki_hash_len = reader. read_u8 ( ) . map_err ( |e| {
1325
1329
SecurityStateError :: from ( format ! ( "error reading stash issuer_spki_hash_len: {}" , e) )
1326
1330
} ) ?;
1327
- let mut issuer_spki_hash = vec ! [ 0 ; issuer_spki_hash_len as usize ] ;
1331
+ let mut issuer_spki_hash = vec ! [ 0 ; issuer_spki_hash_len. into ( ) ] ;
1328
1332
reader. read_exact ( & mut issuer_spki_hash) . map_err ( |e| {
1329
1333
SecurityStateError :: from ( format ! ( "error reading stash issuer_spki_hash: {}" , e) )
1330
1334
} ) ?;
@@ -1333,7 +1337,7 @@ fn load_crlite_stash_from_reader_into_map(
1333
1337
let serial_len = reader. read_u8 ( ) . map_err ( |e| {
1334
1338
SecurityStateError :: from ( format ! ( "error reading stash serial_len: {}" , e) )
1335
1339
} ) ?;
1336
- let mut serial = vec ! [ 0 ; serial_len as usize ] ;
1340
+ let mut serial = vec ! [ 0 ; serial_len. into ( ) ] ;
1337
1341
reader. read_exact ( & mut serial) . map_err ( |e| {
1338
1342
SecurityStateError :: from ( format ! ( "error reading stash serial: {}" , e) )
1339
1343
} ) ?;
0 commit comments