regcomp.c: Don't read uninitialized data
authorKarl Williamson <public@khwilliamson.com>
Wed, 5 Mar 2014 00:43:11 +0000 (17:43 -0700)
committerKarl Williamson <public@khwilliamson.com>
Wed, 5 Mar 2014 01:08:27 +0000 (18:08 -0700)
The blamed commit failed to check whether the data is present before
reading it.

I believe that this creates false positives in te optimizer, so no
actual failures ensued.

regcomp.c

index 91b0b90..2c94b43 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -1271,7 +1271,9 @@ S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
                  || (ANYOF_FLAGS(and_with) & ANYOF_POSIXL))
         {
             /* One or the other of P1, P2 is non-empty. */
-            ANYOF_POSIXL_AND((regnode_charclass_posixl*) and_with, ssc);
+            if (ANYOF_FLAGS(and_with) & ANYOF_POSIXL) {
+                ANYOF_POSIXL_AND((regnode_charclass_posixl*) and_with, ssc);
+            }
             ssc_union(ssc, anded_cp_list, FALSE);
         }
         else { /* P1 = P2 = empty */
@@ -1331,8 +1333,8 @@ S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
         && ! is_ANYOF_SYNTHETIC(or_with))
     {
         /* We ignore P2, leaving P1 going forward */
-    }
-    else {  /* Not inverted */
+    }   /* else  Not inverted */
+    else if (ANYOF_FLAGS(or_with) & ANYOF_POSIXL) {
         ANYOF_POSIXL_OR((regnode_charclass_posixl*)or_with, ssc);
         if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)) {
             unsigned int i;