Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2aa2d23b016e
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: df6c0280d6c6
Choose a head ref
  • 2 commits
  • 3 files changed
  • 2 contributors

Commits on Feb 12, 2015

  1. Copy the full SHA
    1c1838e View commit details

Commits on Feb 13, 2015

  1. Merge pull request #2210 from k77ch7/improve_handling_of_nonascii_cha…

    …racter_after_backslash_on_master
    
    Fix for issue 1069 and 1390 on master: improve handling of non ascii character after backslash
    enebo committed Feb 13, 2015
    Copy the full SHA
    df6c028 View commit details
14 changes: 14 additions & 0 deletions core/src/main/java/org/jruby/lexer/yacc/StringTerm.java
Original file line number Diff line number Diff line change
@@ -317,13 +317,27 @@ public int parseStringIntoBuffer(RubyLexer lexer, LexerSource src, ByteList buff

continue;
} else if (expand) {
/* add NonAscii to Buffer after backslash */
if (!Encoding.isAscii((byte) c)) {
if (addNonAsciiToBuffer(c, src, encoding, lexer, buffer) == RubyLexer.EOF) return RubyLexer.EOF;

continue;
}

src.unread(c);
if (escape) buffer.append('\\');
c = lexer.readEscape();
} else if (qwords && Character.isWhitespace(c)) {
/* ignore backslashed spaces in %w */
} else if (c != end && !(begin != '\0' && c == begin)) {
buffer.append('\\');

/* add NonAscii to Buffer after backslash */
if (!Encoding.isAscii((byte) c)) {
if (addNonAsciiToBuffer(c, src, encoding, lexer, buffer) == RubyLexer.EOF) return RubyLexer.EOF;

continue;
}
}
}
} else if (!Encoding.isAscii((byte) c)) {
36 changes: 12 additions & 24 deletions core/src/test/java/org/jruby/lexer/yacc/StringTermTest.java
Original file line number Diff line number Diff line change
@@ -17,20 +17,14 @@ public void testGH1069() {
final String testScriptUsingSingleQuote = "# encoding: utf-8\n'\\’'";
final String testScriptUsingDoubleQuote = "# encoding: utf-8\n\"\\’\"";

CompatVersion[] versions = new CompatVersion[] { CompatVersion.RUBY1_8,
CompatVersion.RUBY1_9, CompatVersion.RUBY2_0 };
RubyInstanceConfig config = new RubyInstanceConfig();
Ruby runtime = Ruby.newInstance(config);

for (CompatVersion v : versions) {
RubyInstanceConfig config = new RubyInstanceConfig();
config.setCompatVersion(v);
Ruby runtime = Ruby.newInstance(config);
IRubyObject eval1 = runtime.evalScriptlet(testScriptUsingSingleQuote);
assertEquals("\\’", eval1.toJava(String.class));

IRubyObject eval1 = runtime.evalScriptlet(testScriptUsingSingleQuote);
assertEquals("\\’", eval1.toJava(String.class));

IRubyObject eval2 = runtime.evalScriptlet(testScriptUsingDoubleQuote);
assertEquals("’", eval2.toJava(String.class));
}
IRubyObject eval2 = runtime.evalScriptlet(testScriptUsingDoubleQuote);
assertEquals("’", eval2.toJava(String.class));
}

/**
@@ -40,20 +34,14 @@ public void testGH1390() {
final String testScriptUsingSingleQuote = "# encoding: utf-8\n'\\\\あ'";
final String testScriptUsingDoubleQuote = "# encoding: utf-8\n\"\\\\\"";

CompatVersion[] versions = new CompatVersion[] { CompatVersion.RUBY1_8,
CompatVersion.RUBY1_9, CompatVersion.RUBY2_0 };

for (CompatVersion v : versions) {
RubyInstanceConfig config = new RubyInstanceConfig();
config.setCompatVersion(v);
Ruby runtime = Ruby.newInstance(config);
RubyInstanceConfig config = new RubyInstanceConfig();
Ruby runtime = Ruby.newInstance(config);

IRubyObject eval1 = runtime.evalScriptlet(testScriptUsingSingleQuote);
assertEquals("\\あ", eval1.toJava(String.class));
IRubyObject eval1 = runtime.evalScriptlet(testScriptUsingSingleQuote);
assertEquals("\\あ", eval1.toJava(String.class));

IRubyObject eval2 = runtime.evalScriptlet(testScriptUsingDoubleQuote);
assertEquals("\\あ", eval2.toJava(String.class));
}
IRubyObject eval2 = runtime.evalScriptlet(testScriptUsingDoubleQuote);
assertEquals("\\あ", eval2.toJava(String.class));
}

}
1 change: 1 addition & 0 deletions core/src/test/java/org/jruby/test/MainTestSuite.java
Original file line number Diff line number Diff line change
@@ -87,6 +87,7 @@ public static Test suite() throws Throwable {
suite.addTestSuite(TestMethodFactories.class);
suite.addTestSuite(RubyTimeOutputFormatterTest.class);
suite.addTestSuite(org.jruby.lexer.yacc.ByteArrayLexerSourceTest.class);
suite.addTestSuite(org.jruby.lexer.yacc.StringTermTest.class);
suite.addTestSuite(DetailedSourcePositionTest.class);
suite.addTestSuite(org.jruby.runtime.load.LoadServiceResourceInputStreamTest.class);
suite.addTestSuite(TestRubyString.class);