From ba4db227e7d0467d22f85ebbd1fee95aaea3695a Mon Sep 17 00:00:00 2001 From: Sean Date: Fri, 6 May 2016 12:13:50 +0100 Subject: [PATCH] Fix potential overflow bug. --- src/dfa.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dfa.rs b/src/dfa.rs index 2e48a0cb0e..f90af1a6a2 100644 --- a/src/dfa.rs +++ b/src/dfa.rs @@ -66,9 +66,12 @@ use sparse::SparseSet; pub fn can_exec(insts: &Program) -> bool { use prog::Inst::*; // If for some reason we manage to allocate a regex program with more - // than u32::MAX instructions, then we can't execute the DFA because we - // use 32 bit instruction pointers for memory savings. - if insts.len() > ::std::u32::MAX as usize { + // than i32::MAX instructions, then we can't execute the DFA because we + // use 32 bit instruction pointer deltas for memory savings. + // If i32::MAX is the largest positive delta, + // then -i32::MAX == i32::MIN + 1 is the largest negative delta, + // and we are OK to use 32 bits. + if insts.len() > ::std::i32::MAX as usize { return false; } for inst in insts {