]> granicus.if.org Git - re2c/commitdiff
src/dfa/closure_posix.cc: fix pack() to drop two highest bits 224/head
authorSergei Trofimovich <slyfox@gentoo.org>
Mon, 22 Oct 2018 22:05:56 +0000 (23:05 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Mon, 22 Oct 2018 22:05:56 +0000 (23:05 +0100)
```c
longest | (leftmost << 30);
```
assumes `longest` does not exceed 30 bits. It could if
it's a negative value originally.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
re2c/src/dfa/closure_posix.cc

index c33e730207326521ffe5b55d5e1f0bd5813d4385..d110d73ff4f4ba4700e6ffe4ffe72589a36466fb 100644 (file)
@@ -204,6 +204,7 @@ void orders(determ_context_t &ctx)
 static uint32_t pack_u32(uint32_t longest, uint32_t leftmost)
 {
     // leftmost: higher 2 bits, longest: lower 30 bits
+    longest &= ~0u >> 2;
     return longest | (leftmost << 30);
 }