From 70f4c53854fa759b9d466026e3b23163fc57b371 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Thu, 2 Dec 2021 13:09:59 +0800 Subject: [PATCH] Trap out-of-bounds panic for BLOB's. --- CHANGELOG.md | 1 + src/engine.rs | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7eeb3e8..020403dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ Bug fixes --------- * `from_dynamic` now supports deserializing `Option`. +* BLOB's no longer panic when accessed with an out-of-bounds index. Enhancements ------------ diff --git a/src/engine.rs b/src/engine.rs index ac5956bc..aea6638a 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -2052,7 +2052,12 @@ impl Engine { index as usize }; - let value = (arr[arr_idx] as INT).into(); + let value = arr + .get(arr_idx) + .map(|&v| (v as INT).into()) + .ok_or_else(|| { + Box::new(EvalAltResult::ErrorArrayBounds(arr_len, index, idx_pos)) + })?; Ok(Target::BlobByte(target, arr_idx, value)) }