From: Sebastian Harl Date: Sat, 16 Feb 2008 13:09:36 +0000 (+0100) Subject: perl plugin: Do not abort while preparing the stack for a subroutine call. X-Git-Tag: collectd-4.3.0~7^2 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=5ffa49e50eeaf421361fb64ad7105f185251f59f;p=collectd.git perl plugin: Do not abort while preparing the stack for a subroutine call. Else the stack would probably be left in an inconsistent case and might even leak memory. Signed-off-by: Sebastian Harl Signed-off-by: Florian Forster --- diff --git a/src/perl.c b/src/perl.c index 3c50528f..7558a506 100644 --- a/src/perl.c +++ b/src/perl.c @@ -700,11 +700,19 @@ static int pplugin_call_all (pTHX_ int type, ...) ds = va_arg (ap, data_set_t *); vl = va_arg (ap, value_list_t *); - if (-1 == data_set2av (aTHX_ ds, pds)) - return -1; + if (-1 == data_set2av (aTHX_ ds, pds)) { + av_clear (pds); + av_undef (pds); + pds = Nullav; + ret = -1; + } - if (-1 == value_list2hv (aTHX_ vl, ds, pvl)) - return -1; + if (-1 == value_list2hv (aTHX_ vl, ds, pvl)) { + hv_clear (pvl); + hv_undef (pvl); + pvl = Nullhv; + ret = -1; + } XPUSHs (sv_2mortal (newSVpv (ds->type, 0))); XPUSHs (sv_2mortal (newRV_noinc ((SV *)pds))); @@ -738,8 +746,12 @@ static int pplugin_call_all (pTHX_ int type, ...) n = va_arg (ap, notification_t *); - if (-1 == notification2hv (aTHX_ n, notif)) - return -1; + if (-1 == notification2hv (aTHX_ n, notif)) { + hv_clear (notif); + hv_undef (notif); + notif = Nullhv; + ret = -1; + } XPUSHs (sv_2mortal (newRV_noinc ((SV *)notif))); }