regcomp.c: Avoid reading out-of-bounds memory
authorKarl Williamson <khw@cpan.org>
Fri, 28 Dec 2018 02:31:18 +0000 (19:31 -0700)
committerKarl Williamson <khw@cpan.org>
Fri, 28 Dec 2018 02:38:18 +0000 (19:38 -0700)
Recent commit c316b824875fdd5ce52338f301fb0255d843dfec introduced an
out-of-bounds memory read.  This commit fixes it.  An ANYOFH regnode
doesn't have a bitmap, so don't try to read it.

regcomp.c

index 0de0afd..652e8f5 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -1617,6 +1617,7 @@ S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
     }
 
     /* Add in the points from the bit map */
+    if (OP(node) != ANYOFH) {
     for (i = 0; i < NUM_ANYOF_CODE_POINTS; i++) {
         if (ANYOF_BITMAP_TEST(node, i)) {
             unsigned int start = i++;
@@ -1628,6 +1629,7 @@ S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
             new_node_has_latin1 = TRUE;
         }
     }
+    }
 
     /* If this can match all upper Latin1 code points, have to add them
      * as well.  But don't add them if inverting, as when that gets done below,