From 321e7ee3e21c30e07de28a5d07252017c4f4f96e Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 22 Apr 2022 18:51:05 +0000 Subject: [PATCH] fix: string index bounds check --- --- a/crates/jrsonnet-evaluator/src/error.rs +++ b/crates/jrsonnet-evaluator/src/error.rs @@ -36,6 +36,8 @@ #[error("array out of bounds: {0} is not within [0,{1})")] ArrayBoundsError(usize, usize), + #[error("string out of bounds: {0} is not within [0,{1})")] + StringBoundsError(usize, usize), #[error("assert failed: {0}")] AssertionFailed(IStr), --- a/crates/jrsonnet-evaluator/src/evaluate/mod.rs +++ b/crates/jrsonnet-evaluator/src/evaluate/mod.rs @@ -589,13 +589,19 @@ n.value_type(), )), - (Val::Str(s), Val::Num(n)) => Val::Str( - s.chars() + (Val::Str(s), Val::Num(n)) => Val::Str({ + let v: IStr = s + .chars() .skip(n as usize) .take(1) .collect::() - .into(), - ), + .into(); + if v.is_empty() { + let size = s.chars().count(); + throw!(StringBoundsError(n as usize, size)) + } + v + }), (Val::Str(_), n) => throw!(ValueIndexMustBeTypeGot( ValType::Str, ValType::Num, -- gitstuff