From ce61edb51f6433437a53ebe557b91c6f82dfa16b Mon Sep 17 00:00:00 2001 From: Andrew Cann Date: Thu, 10 Mar 2016 17:27:51 +0800 Subject: [PATCH] Replace use of saturating_add --- src/rustc_serialize/reader.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/rustc_serialize/reader.rs b/src/rustc_serialize/reader.rs index 7b2221d..1be8304 100644 --- a/src/rustc_serialize/reader.rs +++ b/src/rustc_serialize/reader.rs @@ -347,8 +347,15 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { let len = try!(self.read_usize()); match self.size_limit { SizeLimit::Infinite => (), - SizeLimit::Bounded(x) if self.read.saturating_add(len as u64) <= x => (), - SizeLimit::Bounded(_) => return Err(DecodingError::SizeLimit), + SizeLimit::Bounded(x) => { + 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) } @@ -363,8 +370,15 @@ impl<'a, R: Read> Decoder for DecoderReader<'a, R> { let len = try!(self.read_usize()); match self.size_limit { SizeLimit::Infinite => (), - SizeLimit::Bounded(x) if self.read.saturating_add(len as u64) <= x => (), - SizeLimit::Bounded(_) => return Err(DecodingError::SizeLimit), + SizeLimit::Bounded(x) => { + 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) }