In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/fe2ce09d592612ace5bf8acccba9db512adb54a5?hp=dc21de0ce42c790f35d2d6062e09e01e787138af>
- Log ----------------------------------------------------------------- commit fe2ce09d592612ace5bf8acccba9db512adb54a5 Author: Tony Cook <t...@develop-help.com> Date: Tue May 20 15:06:16 2014 +1000 bump $PerlIO::via::VERSION to 0.15 M ext/PerlIO-via/via.pm commit 3ed3a8afebd64616aef147205403b96b30a4b4ee Author: Jarkko Hietaniemi <j...@iki.fi> Date: Wed Apr 23 12:53:42 2014 -0400 add va_end() calls where missing for a va_start() or va_end(). Fix for Coverity perl5 CIDs 29225, 29226, 29227, 29228, 29229: Missing varargs init or cleanup (VARARGS) missing va_end: va_end was not called for foo. Use of va_args must be finished off with va_end (in other words, use of va_start or va_copy must be bracketed off with va_end). In most platforms va_end is a no-op, but in some platforms it is required for proper cleanup (or face stack smash, or memory leak). Tony: move va_start() out of the declaration block M ext/PerlIO-via/via.xs M mathoms.c M perlio.c M util.c ----------------------------------------------------------------------- Summary of changes: ext/PerlIO-via/via.pm | 2 +- ext/PerlIO-via/via.xs | 9 +++++---- mathoms.c | 10 ++++++++-- perlio.c | 1 + util.c | 1 + 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ext/PerlIO-via/via.pm b/ext/PerlIO-via/via.pm index 77586f6..a10f7ee 100644 --- a/ext/PerlIO-via/via.pm +++ b/ext/PerlIO-via/via.pm @@ -1,5 +1,5 @@ package PerlIO::via; -our $VERSION = '0.14'; +our $VERSION = '0.15'; require XSLoader; XSLoader::load(); 1; diff --git a/ext/PerlIO-via/via.xs b/ext/PerlIO-via/via.xs index 619174a..d7a037b 100644 --- a/ext/PerlIO-via/via.xs +++ b/ext/PerlIO-via/via.xs @@ -68,15 +68,16 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, ...) { PerlIOVia *s = PerlIOSelf(f, PerlIOVia); + SV *result = Nullsv; CV *cv = (*save) ? *save : PerlIOVia_fetchmethod(aTHX_ s, method, save); - SV *result = Nullsv; - va_list ap; - va_start(ap, flags); if (cv != (CV *) - 1) { IV count; dSP; SV *arg; + va_list ap; + + va_start(ap, flags); PUSHSTACKi(PERLSI_MAGIC); ENTER; PUSHMARK(sp); @@ -84,6 +85,7 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, while ((arg = va_arg(ap, SV *))) { XPUSHs(arg); } + va_end(ap); if (*PerlIONext(f)) { if (!s->fh) { GV *gv; @@ -121,7 +123,6 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, LEAVE; POPSTACK; } - va_end(ap); return result; } diff --git a/mathoms.c b/mathoms.c index 73f1e8d..1132ac8 100644 --- a/mathoms.c +++ b/mathoms.c @@ -544,6 +544,7 @@ int Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) { dTHXs; + int ret = 0; va_list(arglist); /* Easier to special case this here than in embed.pl. (Look at what it @@ -553,7 +554,9 @@ Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) #endif va_start(arglist, format); - return PerlIO_vprintf(stream, format, arglist); + ret = PerlIO_vprintf(stream, format, arglist); + va_end(arglist); + return ret; } int @@ -561,13 +564,16 @@ Perl_printf_nocontext(const char *format, ...) { dTHX; va_list(arglist); + int ret = 0; #ifdef PERL_IMPLICIT_CONTEXT PERL_ARGS_ASSERT_PRINTF_NOCONTEXT; #endif va_start(arglist, format); - return PerlIO_vprintf(PerlIO_stdout(), format, arglist); + ret = PerlIO_vprintf(PerlIO_stdout(), format, arglist); + va_end(arglist); + return ret; } #if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)) diff --git a/perlio.c b/perlio.c index 03c6513..89b8ee6 100644 --- a/perlio.c +++ b/perlio.c @@ -4919,6 +4919,7 @@ PerlIO_vprintf(PerlIO *f, const char *fmt, va_list ap) s = SvPV_const(sv, len); wrote = PerlIO_write(f, s, len); SvREFCNT_dec(sv); + va_end(apc); return wrote; } diff --git a/util.c b/util.c index b90abe5..4daf01d 100644 --- a/util.c +++ b/util.c @@ -4935,6 +4935,7 @@ Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap retval = vsprintf(buffer, format, ap); # endif #endif /* #ifdef NEED_VA_COPY */ + va_end(apc); /* vsprintf() shows failure with < 0 */ if (retval < 0 #ifdef HAS_VSNPRINTF -- Perl5 Master Repository