From b8620121a692df6313eeb5ccf7baf89c1e364116 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 15 Dec 2019 15:43:22 +0100 Subject: =?UTF-8?q?Fix=20nasty=20string=20boundary=20bug=20=F0=9F=8F=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/size.rs | 21 +++++++++------------ src/syntax/parsing.rs | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/size.rs b/src/size.rs index edab21d1..09096783 100644 --- a/src/size.rs +++ b/src/size.rs @@ -352,21 +352,18 @@ impl FromStr for Size { type Err = ParseSizeError; fn from_str(src: &str) -> Result { - if src.len() < 2 { - return Err(ParseSizeError); - } + let func = match () { + _ if src.ends_with("pt") => Size::pt, + _ if src.ends_with("mm") => Size::mm, + _ if src.ends_with("cm") => Size::cm, + _ if src.ends_with("in") => Size::inches, + _ => return Err(ParseSizeError), + }; - let value = src[..src.len() - 2] + Ok(func(src[..src.len() - 2] .parse::() - .map_err(|_| ParseSizeError)?; + .map_err(|_| ParseSizeError)?)) - Ok(match &src[src.len() - 2..] { - "pt" => Size::pt(value), - "mm" => Size::mm(value), - "cm" => Size::cm(value), - "in" => Size::inches(value), - _ => return Err(ParseSizeError), - }) } } diff --git a/src/syntax/parsing.rs b/src/syntax/parsing.rs index 41a8728b..dcba1d0f 100644 --- a/src/syntax/parsing.rs +++ b/src/syntax/parsing.rs @@ -253,7 +253,7 @@ impl<'s> Parser<'s> { // This loop does not actually loop, but is used for breaking. loop { if text.ends_with('%') { - if let Ok(percent) = text[..text.len() - 1].parse::() { + if let Ok(percent) = text[.. text.len()-1].parse::() { break Expression::Num(percent / 100.0); } } -- cgit v1.2.3