In some cases, S_scan_heredoc() can already be at end of file and
PL_rsfp is NULL. If we're on the final line and that line has no
newline we'd assert or crash.
Now, if we don't find that newline, we obviously can't find the
terminator, so go straight to reporting the missing terminator.
I considered setting s to PL_bufend, but that would just be more
work to print the same message.
}
use strict;
-plan(tests => 40);
+plan(tests => 41);
# heredoc without newline (#65838)
{},
"don't use an invalid oldoldbufptr"
);
+
+ # [perl #125540] this asserted or crashed
+ fresh_perl_like(
+ q(map d$#<<<<),
+ qr/Can't find string terminator "" anywhere before EOF at - line 1\./,
+ {},
+ "Don't assert parsing a here-doc if we hit EOF early"
+ );
}
goto streaming;
}
}
- else { /* eval */
+ else { /* eval or we've already hit EOF */
s = (char*)memchr((void*)s, '\n', PL_bufend - s);
- assert(s);
+ if (!s)
+ goto interminable;
}
linestr = shared->ls_linestr;
bufend = SvEND(linestr);