From: Zefram Date: Sun, 11 Sep 2011 12:56:17 +0000 (+0100) Subject: croak if reallocation occurs during scan_str X-Git-Tag: 0.006007~6 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d3480bb491db24c6775fdb73de579f9e797c7d3b;p=p5sagit%2FDevel-Declare.git croak if reallocation occurs during scan_str --- diff --git a/Changes b/Changes index 1b57729..706de85 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,7 @@ Changes for Devel-Declare - Depend on B::Hooks::OP::Check version 0.19, which fixes a serious bug in how it interacts with other modules that hook ops. + - Detect and croak if unwanted reallocation occurs during toke_scan_str. - Add MYMETA.{json,yml} to MANIFEST.SKIP and .gitignore. 0.006006 - 23 Aug 2011 diff --git a/Declare.xs b/Declare.xs index be70d82..41a991b 100644 --- a/Declare.xs +++ b/Declare.xs @@ -218,10 +218,14 @@ int dd_toke_scan_ident(pTHX_ int offset) { } int dd_toke_scan_str(pTHX_ int offset) { + char* old_pvx = SvPVX(PL_linestr); STRLEN remaining = sv_len(PL_linestr) - offset; SV* line_copy = newSVsv(PL_linestr); char* base_s = SvPVX(PL_linestr) + offset; char* s = scan_str(base_s, FALSE, FALSE); + if(SvPVX(PL_linestr) != old_pvx) + croak("PL_linestr reallocated during scan_str, " + "Devel::Declare can't continue"); if (s != base_s && sv_len(PL_lex_stuff) > remaining) { int ret = (s - SvPVX(PL_linestr)) + remaining; sv_catsv(line_copy, PL_linestr);