Avoid the need for 2 casts added in 31055 by using a better type for
Nicholas Clark [Wed, 25 Apr 2007 09:54:17 +0000 (09:54 +0000)]
the local variable. Add an assertion that another cast is not a data
loss (and that there is no buffer overflow)

p4raw-id: //depot/perl@31069

ext/Devel/Peek/Peek.xs
utf8.c

index e1c62c3..75023cd 100644 (file)
@@ -344,11 +344,11 @@ PPCODE:
     SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
     const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
     SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
-    const I32 save_dumpindent = PL_dumpindent;
+    const U16 save_dumpindent = PL_dumpindent;
     PL_dumpindent = 2;
     do_sv_dump(0, Perl_debug_log, sv, 0, lim,
               (bool)(dumpop && SvTRUE(dumpop)), pv_lim);
-    PL_dumpindent = (U16)save_dumpindent;
+    PL_dumpindent = save_dumpindent;
 }
 
 void
@@ -360,7 +360,7 @@ PPCODE:
     SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
     const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
     SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
-    const I32 save_dumpindent = PL_dumpindent;
+    const U16 save_dumpindent = PL_dumpindent;
     PL_dumpindent = 2;
 
     for (i=1; i<items; i++) {
@@ -368,7 +368,7 @@ PPCODE:
        do_sv_dump(0, Perl_debug_log, ST(i), 0, lim,
                   (bool)(dumpop && SvTRUE(dumpop)), pv_lim);
     }
-    PL_dumpindent = (U16)save_dumpindent;
+    PL_dumpindent = save_dumpindent;
 }
 
 void
diff --git a/utf8.c b/utf8.c
index 3c80bd2..b44057c 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -1726,6 +1726,7 @@ Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
        }
 
        PL_last_swash_hv = hv;
+       assert(klen <= sizeof(PL_last_swash_key));
        PL_last_swash_klen = (U8)klen;
        /* FIXME change interpvar.h?  */
        PL_last_swash_tmps = (U8 *) tmps;