Skip to content

Commit eaa2194

Browse files
committed
Bug 1940804 - avoid some "as" casts in cert_storage r=jschanck
Differential Revision: https://phabricator.services.mozilla.com/D233775
1 parent a0d3649 commit eaa2194

File tree

1 file changed

+22
-18
lines changed
  • security/manager/ssl/cert_storage/src

1 file changed

+22
-18
lines changed

security/manager/ssl/cert_storage/src/lib.rs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,10 @@ impl SecurityState {
495495
};
496496
let reader = env_and_store.env.read()?;
497497
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+
})?))
502502
}
503503
Ok(None) => Ok(None),
504504
Ok(_) => Err(SecurityStateError::from(
@@ -1034,10 +1034,10 @@ struct Cert<'a> {
10341034

10351035
impl<'a> Cert<'a> {
10361036
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() {
10381038
return Err(SecurityStateError::from("certificate is too long"));
10391039
}
1040-
if subject.len() > u16::max as usize {
1040+
if subject.len() > u16::MAX.into() {
10411041
return Err(SecurityStateError::from("subject is too long"));
10421042
}
10431043
Ok(Cert {
@@ -1061,7 +1061,7 @@ impl<'a> Cert<'a> {
10611061
return Err(SecurityStateError::from("invalid Cert: no der len?"));
10621062
}
10631063
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();
10651065
if rest.len() < der_len {
10661066
return Err(SecurityStateError::from("invalid Cert: no der?"));
10671067
}
@@ -1071,7 +1071,7 @@ impl<'a> Cert<'a> {
10711071
return Err(SecurityStateError::from("invalid Cert: no subject len?"));
10721072
}
10731073
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();
10751075
if rest.len() < subject_len {
10761076
return Err(SecurityStateError::from("invalid Cert: no subject?"));
10771077
}
@@ -1102,15 +1102,19 @@ impl<'a> Cert<'a> {
11021102
+ size_of::<i16>(),
11031103
);
11041104
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+
)?;
11091111
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+
)?;
11141118
bytes.extend_from_slice(&self.subject);
11151119
bytes.write_i16::<NetworkEndian>(self.trust)?;
11161120
Ok(bytes)
@@ -1324,7 +1328,7 @@ fn load_crlite_stash_from_reader_into_map(
13241328
let issuer_spki_hash_len = reader.read_u8().map_err(|e| {
13251329
SecurityStateError::from(format!("error reading stash issuer_spki_hash_len: {}", e))
13261330
})?;
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()];
13281332
reader.read_exact(&mut issuer_spki_hash).map_err(|e| {
13291333
SecurityStateError::from(format!("error reading stash issuer_spki_hash: {}", e))
13301334
})?;
@@ -1333,7 +1337,7 @@ fn load_crlite_stash_from_reader_into_map(
13331337
let serial_len = reader.read_u8().map_err(|e| {
13341338
SecurityStateError::from(format!("error reading stash serial_len: {}", e))
13351339
})?;
1336-
let mut serial = vec![0; serial_len as usize];
1340+
let mut serial = vec![0; serial_len.into()];
13371341
reader.read_exact(&mut serial).map_err(|e| {
13381342
SecurityStateError::from(format!("error reading stash serial: {}", e))
13391343
})?;

0 commit comments

Comments
 (0)