croak if reallocation occurs during scan_str
Zefram [Sun, 11 Sep 2011 12:56:17 +0000 (13:56 +0100)]
Changes
Declare.xs

diff --git a/Changes b/Changes
index 1b57729..706de85 100644 (file)
--- 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
index be70d82..41a991b 100644 (file)
@@ -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);