summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--parse.y5
-rw-r--r--test/ripper/test_scanner_events.rb4
3 files changed, 13 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index dac972a42d..83ca30336c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Oct 16 15:05:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_here_document): do not append already appended
+ and disposed code fragment. [ruby-dev:48647] [Bug #10392]
+
Thu Oct 16 10:35:33 2014 Eric Wong <e@80x24.org>
* test/-ext-/bug_reporter/test_bug_reporter.rb
diff --git a/parse.y b/parse.y
index 5abd889f3c..1d01c16986 100644
--- a/parse.y
+++ b/parse.y
@@ -6575,7 +6575,10 @@ parser_here_document(struct parser_params *parser, NODE *here)
if (pend < lex_pend) rb_str_cat(str, "\n", 1);
lex_goto_eol(parser);
if (nextc() == -1) {
- if (str) dispose_string(str);
+ if (str) {
+ dispose_string(str);
+ str = 0;
+ }
goto error;
}
} while (!whole_match_p(eos, len, indent));
diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb
index 91903e3dcd..3044d20049 100644
--- a/test/ripper/test_scanner_events.rb
+++ b/test/ripper/test_scanner_events.rb
@@ -708,6 +708,10 @@ class TestRipper::ScannerEvents < Test::Unit::TestCase
assert_equal ["there\n""heredoc", "\n"],
scan('tstring_content', "<<""EOS\n""there\n""heredoc\#@foo\nEOS"),
bug7255
+ bug10392 = '[ruby-dev:48647] [Bug #10392]'
+ assert_equal [" E\n\n"],
+ scan('tstring_content', "<<""'E'\n E\n\n"),
+ bug10392
end
def test_heredoc_end