The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 04
META.json 29
META.yml 1317
Parameters.xs 1216
README 11
lib/Function/Parameters/Info.pm 11
lib/Function/Parameters.pm 22
padop_on_crack.c.inc 22
8 files changed (This is a version diff) 3352
@@ -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