This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
narrow scope of argsv in sv_vcatpvfn_flags()
authorZefram <zefram@fysh.org>
Sat, 23 Dec 2017 09:07:50 +0000 (09:07 +0000)
committerZefram <zefram@fysh.org>
Sat, 23 Dec 2017 09:07:50 +0000 (09:07 +0000)
argsv was being retained between format specifiers, causing incorrect
treatment of format specifiers following one that took an SV argument.
Fixes [perl #132645].

sv.c
t/lib/warnings/op

diff --git a/sv.c b/sv.c
index 7e3987c..a79c033 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -11814,7 +11814,6 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
     STRLEN origlen;
     Size_t svix = 0;
     static const char nullstr[] = "(null)";
-    SV *argsv = NULL;
     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
     /* Times 4: a decimal digit takes more than 3 binary digits.
@@ -11919,6 +11918,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
        Size_t efix      = 0;         /* explicit format parameter index */
        const Size_t osvix  = svix;   /* original index in case of bad fmt */
 
+       SV *argsv        = NULL;
        bool is_utf8     = FALSE;     /* is this item utf8?   */
         bool arg_missing = FALSE;     /* give "Missing argument" warning */
        char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
index 23e03df..52ef378 100644 (file)
@@ -189,6 +189,13 @@ Scalar value @a[...] better written as $a[...] at - line 13.
 Scalar value @a{...} better written as $a{...} at - line 14.
 ########
 # op.c
+# [perl #132645]
+use warnings 'syntax';
+@inf[3];
+EXPECT
+Scalar value @inf[3] better written as $inf[3] at - line 4.
+########
+# op.c
 use utf8;
 use open qw( :utf8 :std );
 use warnings 'syntax' ;