From 35ee8e80f25d852620061fc6e9627485467d12ea Mon Sep 17 00:00:00 2001 From: Edward Barnard Date: Fri, 25 Dec 2015 01:16:23 +0000 Subject: Better handling of u64 to usize conversions --- src/lib.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 5f3275f..def6bfd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -157,6 +157,8 @@ pub enum PlistEvent { StartPlist, EndPlist, + // While the length of an array or dict cannot be feasably greater than max(usize) this better + // conveys the concept of an effectively unbounded event stream. StartArray(Option), EndArray, @@ -286,3 +288,18 @@ impl Iterator for EventReader { pub trait EventWriter { fn write(&mut self, event: &PlistEvent) -> Result<()>; } + +fn u64_to_usize(len_u64: u64) -> Result { + let len = len_u64 as usize; + if len as u64 != len_u64 { + return Err(Error::InvalidData); // Too long + } + Ok(len) +} + +fn u64_option_to_usize(len: Option) -> Result> { + match len { + Some(len) => Ok(Some(try!(u64_to_usize(len)))), + None => Ok(None), + } +} -- cgit v1.2.3