From cb5b45180fe8aafc451f06968c9ecd3057cfa334 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Sat, 1 Feb 2025 05:33:23 +0100 Subject: [PATCH] Don't panic in trie_error_val_index either --- components/collections/src/codepointtrie/cptrie.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/collections/src/codepointtrie/cptrie.rs b/components/collections/src/codepointtrie/cptrie.rs index 5755e1fd60d..4ee23134801 100644 --- a/components/collections/src/codepointtrie/cptrie.rs +++ b/components/collections/src/codepointtrie/cptrie.rs @@ -236,7 +236,11 @@ impl<'trie, T: TrieValue> CodePointTrie<'trie, T> { /// error value. #[inline(always)] // `always` based on normalizer benchmarking fn trie_error_val_index(&self) -> u32 { - self.data.len() as u32 - ERROR_VALUE_NEG_DATA_OFFSET + // We use wrapping_sub here to avoid panicky overflow checks. + // len should always be > 1, but if it isn't this will just cause GIGO behavior of producing + // None on `.get()` + debug_assert!(self.data.len() as u32 >= ERROR_VALUE_NEG_DATA_OFFSET); + (self.data.len() as u32).wrapping_sub(ERROR_VALUE_NEG_DATA_OFFSET) } fn internal_small_index(&self, code_point: u32) -> u32 {