Replace use of saturating_add

This commit is contained in:
Andrew Cann 2016-03-10 17:27:51 +08:00
parent 1e21e5d13b
commit ce61edb51f
1 changed files with 18 additions and 4 deletions

View File

@ -347,8 +347,15 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> {
let len = try!(self.read_usize()); let len = try!(self.read_usize());
match self.size_limit { match self.size_limit {
SizeLimit::Infinite => (), SizeLimit::Infinite => (),
SizeLimit::Bounded(x) if self.read.saturating_add(len as u64) <= x => (), SizeLimit::Bounded(x) => {
SizeLimit::Bounded(_) => return Err(DecodingError::SizeLimit), let overflow = match self.read.checked_add(len as u64) {
Some(y) => y > x,
None => true,
};
if overflow {
return Err(DecodingError::SizeLimit);
}
},
}; };
f(self, len) f(self, len)
} }
@ -363,8 +370,15 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> {
let len = try!(self.read_usize()); let len = try!(self.read_usize());
match self.size_limit { match self.size_limit {
SizeLimit::Infinite => (), SizeLimit::Infinite => (),
SizeLimit::Bounded(x) if self.read.saturating_add(len as u64) <= x => (), SizeLimit::Bounded(x) => {
SizeLimit::Bounded(_) => return Err(DecodingError::SizeLimit), let overflow = match self.read.checked_add(len as u64) {
Some(y) => y > x,
None => true,
};
if overflow {
return Err(DecodingError::SizeLimit);
}
},
}; };
f(self, len) f(self, len)
} }