This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
doop.c: Change out-of-bounds value
authorKarl Williamson <khw@cpan.org>
Mon, 4 Nov 2019 20:12:21 +0000 (13:12 -0700)
committerKarl Williamson <khw@cpan.org>
Thu, 7 Nov 2019 04:22:24 +0000 (21:22 -0700)
This currently uses 0xfeedface as a marker for something that isn't a
legal value.  But that could in fact become legal at same point.  This
defines a value TR_OOB that can be guaranteed not to become legal.

doop.c
op.h

diff --git a/doop.c b/doop.c
index 60f2b35..0fa9103 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -216,7 +216,7 @@ S_do_trans_complex(pTHX_ SV * const sv, const OPtrans_map * const tbl)
         /* What the mapping of the previous character was to.  If the new
          * character has the same mapping, it is squashed from the output (but
          * still is included in the count) */
-        UV pch = 0xfeedface;
+        UV pch = TR_OOB;
 
        if (grows)
             /* Allow for worst-case expansion: Each input byte can become 2.
@@ -261,7 +261,7 @@ S_do_trans_complex(pTHX_ SV * const sv, const OPtrans_map * const tbl)
             }
 
             s += len;
-            pch = 0xfeedface;
+            pch = TR_OOB;
         }
 
        if (grows) {
diff --git a/op.h b/op.h
index 2d5f81e..cc9f1af 100644 (file)
--- a/op.h
+++ b/op.h
@@ -1113,6 +1113,7 @@ C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
 #  define TR_UNMAPPED           (UV)-1
 #  define TR_DELETE             (UV)-2
 #  define TR_R_EMPTY            (UV)-3  /* rhs (replacement) is empty */
+#  define TR_OOB                (UV)-4  /* Something that isn't one of the others */
 #endif
 #if defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
 #define RANGE_INDICATOR  ILLEGAL_UTF8_BYTE