@@ -1,5 +1,9 @@
Revision history for Function-Parameters
+1.0402 2014-09-01
+ - fix #92871: don't access dead stack frames on error
+ - fix #95803: don't dereference NULL
+
1.0401 2013-10-09
- enable type checks by default
@@ -4,7 +4,7 @@
"Lukas Mai <l.mai@web.de>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.78, CPAN::Meta::Converter version 2.132661",
+ "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.140640",
"license" : [
"perl_5"
],
@@ -23,6 +23,13 @@
"build" : {
"requires" : {}
},
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "6.48",
+ "strict" : "0",
+ "warnings" : "0"
+ }
+ },
"runtime" : {
"requires" : {
"Carp" : "0",
@@ -50,5 +57,5 @@
"web" : "https://github.com/mauke/Function-Parameters"
}
},
- "version" : "1.0401"
+ "version" : "1.0402"
}
@@ -3,28 +3,32 @@ abstract: 'subroutine definitions with parameter lists'
author:
- 'Lukas Mai <l.mai@web.de>'
build_requires:
- Dir::Self: 0
- Test::Fatal: 0
- Test::More: 0
- constant: 0
- strict: 0
- utf8: 0
+ Dir::Self: '0'
+ Test::Fatal: '0'
+ Test::More: '0'
+ constant: '0'
+ strict: '0'
+ utf8: '0'
+configure_requires:
+ ExtUtils::MakeMaker: '6.48'
+ strict: '0'
+ warnings: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.78, CPAN::Meta::Converter version 2.132661'
+generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.140640'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: Function-Parameters
no_index:
directory:
- t
- inc
requires:
- Carp: 0
- XSLoader: 0
- perl: 5.014000
- warnings: 0
+ Carp: '0'
+ XSLoader: '0'
+ perl: '5.014000'
+ warnings: '0'
resources:
repository: git://github.com/mauke/Function-Parameters
-version: 1.0401
+version: '1.0402'
@@ -118,16 +118,18 @@ DEFSTRUCT(Resource) {
typedef Resource *Sentinel[1];
-static void sentinel_clear_void(pTHX_ void *p) {
- Resource **pp = p;
- while (*pp) {
- Resource *cur = *pp;
+static void sentinel_clear_void(pTHX_ void *pv) {
+ Resource **pp = pv;
+ Resource *p = *pp;
+ Safefree(pp);
+ while (p) {
+ Resource *cur = p;
if (cur->destroy) {
cur->destroy(aTHX_ cur->data);
}
cur->data = (void *)"no";
cur->destroy = NULL;
- *pp = cur->next;
+ p = cur->next;
Safefree(cur);
}
}
@@ -1971,7 +1973,7 @@ static int parse_fun(pTHX_ Sentinel sen, OP **pop, const char *keyword_ptr, STRL
}
}
-static int kw_flags_enter(pTHX_ Sentinel sen, const char *kw_ptr, STRLEN kw_len, KWSpec *spec) {
+static int kw_flags_enter(pTHX_ Resource ***psen, const char *kw_ptr, STRLEN kw_len, KWSpec *spec) {
HV *hints;
SV *sv, **psv;
const char *p, *kw_active;
@@ -2006,19 +2008,21 @@ static int kw_flags_enter(pTHX_ Sentinel sen, const char *kw_ptr, STRLEN kw_len,
ENTER;
SAVETMPS;
- SAVEDESTRUCTOR_X(sentinel_clear_void, sen);
+ Newx(*psen, 1, Resource *);
+ **psen = NULL;
+ SAVEDESTRUCTOR_X(sentinel_clear_void, *psen);
spec->flags = 0;
spec->reify_type = 0;
- spec->shift = sentinel_mortalize(sen, newSVpvs(""));
- spec->attrs = sentinel_mortalize(sen, newSVpvs(""));
+ spec->shift = sentinel_mortalize(*psen, newSVpvs(""));
+ spec->attrs = sentinel_mortalize(*psen, newSVpvs(""));
#define FETCH_HINTK_INTO(NAME, PTR, LEN, X) STMT_START { \
const char *fk_ptr_; \
STRLEN fk_len_; \
I32 fk_xlen_; \
SV *fk_sv_; \
- fk_sv_ = sentinel_mortalize(sen, newSVpvs(HINTK_ ## NAME)); \
+ fk_sv_ = sentinel_mortalize(*psen, newSVpvs(HINTK_ ## NAME)); \
sv_catpvn(fk_sv_, PTR, LEN); \
fk_ptr_ = SvPV(fk_sv_, fk_len_); \
fk_xlen_ = fk_len_; \
@@ -2050,11 +2054,11 @@ static int kw_flags_enter(pTHX_ Sentinel sen, const char *kw_ptr, STRLEN kw_len,
}
static int my_keyword_plugin(pTHX_ char *keyword_ptr, STRLEN keyword_len, OP **op_ptr) {
- Sentinel sen = { NULL };
+ Resource **sen;
KWSpec spec;
int ret;
- if (kw_flags_enter(aTHX_ sen, keyword_ptr, keyword_len, &spec)) {
+ if (kw_flags_enter(aTHX_ &sen, keyword_ptr, keyword_len, &spec)) {
/* scope was entered, 'sen' and 'spec' are initialized */
ret = parse_fun(aTHX_ sen, op_ptr, keyword_ptr, keyword_len, &spec);
FREETMPS;
@@ -36,7 +36,7 @@ You can also look for information at:
COPYRIGHT AND LICENCE
-Copyright (C) 2009-2013 Lukas Mai
+Copyright (C) 2009-2014 Lukas Mai
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
@@ -3,7 +3,7 @@ package Function::Parameters::Info;
use v5.14.0;
use warnings;
-our $VERSION = '1.0301';
+our $VERSION = '1.0402';
# If Moo isn't loaded yet but Moose is, avoid pulling in Moo and fall back to Moose
my ($Moo, $meta_make_immutable);
@@ -7,7 +7,7 @@ use Carp qw(confess);
use XSLoader;
BEGIN {
- our $VERSION = '1.0401';
+ our $VERSION = '1.0402';
XSLoader::load;
}
@@ -883,7 +883,7 @@ Lukas Mai, C<< <l.mai at web.de> >>
=head1 COPYRIGHT & LICENSE
-Copyright 2010-2013 Lukas Mai.
+Copyright 2010-2014 Lukas Mai.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
@@ -371,8 +371,8 @@ func_ops:
case OP_CONST:
sv = cSVOPo_sv;
if (cSVOPo->op_private & OPpCONST_STRICT) {
- //no_bareword_allowed(o);
- *((int *)NULL) += 1;
+ /* no_bareword_allowed(o); */
+ croak("%s: internal error: what even are birds", MY_PKG);
} else {
if (ckWARN(WARN_VOID)) {
/* don't warn on optimised away booleans, eg