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: 8801d55b3964
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 2c583546d3fe
Choose a head ref
  • 2 commits
  • 3 files changed
  • 2 contributors

Commits on Oct 21, 2014

  1. Copy the full SHA
    2b7fecb View commit details

Commits on Nov 3, 2014

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

    …racter_after_backslash
    
    improve handling of non ascii character after backslash
    enebo committed Nov 3, 2014
    Copy the full SHA
    2c58354 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(RubyYaccLexer lexer, LexerSource src, ByteList

continue;
} else if (expand) {
/* add NonAscii to Buffer after backslash */
if(!Encoding.isAscii((byte) c)) {
if (addNonAsciiToBuffer(c, src, encoding, lexer, buffer) == RubyYaccLexer.EOF) return RubyYaccLexer.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) == RubyYaccLexer.EOF) return RubyYaccLexer.EOF;

continue;
}
}
}
} else if (!lexer.isOneEight() && !Encoding.isAscii((byte) c)) {
59 changes: 59 additions & 0 deletions core/src/test/java/org/jruby/lexer/yacc/StringTermTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.jruby.lexer.yacc;

import org.jruby.CompatVersion;
import org.jruby.Ruby;
import org.jruby.RubyInstanceConfig;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.KCode;

import junit.framework.TestCase;

public class StringTermTest extends TestCase {

/**
* @see https://github.com/jruby/jruby/issues/1069
*/
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 };

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 eval2 = runtime.evalScriptlet(testScriptUsingDoubleQuote);
assertEquals("’", eval2.toJava(String.class));
}
}

/**
* @see https://github.com/jruby/jruby/issues/1390
*/
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);

IRubyObject eval1 = runtime.evalScriptlet(testScriptUsingSingleQuote);
assertEquals("\\あ", eval1.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(org.jruby.runtime.load.LoadServiceResourceInputStreamTest.class);
suite.addTestSuite(TestRubyString.class);
suite.addTestSuite(TestRubyNKF.class);