From c3314d3689f5892f8eac217b03963d419cde5e3f Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 21 Mar 2020 07:56:55 +1000 Subject: [PATCH] don't crash when card:0 passed in --- rslib/src/search/parser.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index 98252e90a..a50aeb46f 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -373,7 +373,7 @@ fn parse_prop(val: &str) -> ParseResult> { fn parse_template(val: &str) -> SearchNode<'static> { SearchNode::CardTemplate(match val.parse::() { - Ok(n) => TemplateKind::Ordinal(n), + Ok(n) => TemplateKind::Ordinal(n.max(1) - 1), Err(_) => TemplateKind::Name(val.into()), }) } @@ -425,7 +425,12 @@ mod test { ); assert_eq!( parse("card:3")?, - vec![Search(CardTemplate(TemplateKind::Ordinal(3)))] + vec![Search(CardTemplate(TemplateKind::Ordinal(2)))] + ); + // 0 must not cause a crash due to underflow + assert_eq!( + parse("card:0")?, + vec![Search(CardTemplate(TemplateKind::Ordinal(0)))] ); assert_eq!(parse("deck:default")?, vec![Search(Deck("default".into()))]); assert_eq!(parse("note:basic")?, vec![Search(NoteType("basic".into()))]);