diff --git a/core/src/main/java/org/luaj/vm2/compiler/LexState.java b/core/src/main/java/org/luaj/vm2/compiler/LexState.java index 2f8b4329..94d29c66 100644 --- a/core/src/main/java/org/luaj/vm2/compiler/LexState.java +++ b/core/src/main/java/org/luaj/vm2/compiler/LexState.java @@ -552,9 +552,12 @@ public class LexState extends Constants { continue; } default: { - if (!isdigit(current)) - save_and_next(); /* handles \\, \", \', and \? */ - else { /* \xxx */ + if (!isdigit(current)) { + if (current == '\\' || current == '"' || current == '\'') + save_and_next(); + else + lexerror("invalid escape sequence", TK_STRING); + } else { /* \xxx */ int i = 0; c = 0; do { @@ -2150,4 +2153,4 @@ public class LexState extends Constants { /* }====================================================================== */ -} \ No newline at end of file +} diff --git a/jse/src/test/java/org/luaj/vm2/compiler/SimpleTests.java b/jse/src/test/java/org/luaj/vm2/compiler/SimpleTests.java index 143b9490..59f3c960 100644 --- a/jse/src/test/java/org/luaj/vm2/compiler/SimpleTests.java +++ b/jse/src/test/java/org/luaj/vm2/compiler/SimpleTests.java @@ -4,6 +4,7 @@ import junit.framework.TestCase; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaDouble; import org.luaj.vm2.LuaInteger; +import org.luaj.vm2.LuaError; import org.luaj.vm2.LuaValue; import org.luaj.vm2.libs.jse.JsePlatform; @@ -61,7 +62,17 @@ public class SimpleTests extends TestCase { "print( 2 )\n"; doTest( s ); } - + + public void testInvalidStringEscapeFails() { + try { + globals.load("local s = \"bad\\qescape\"\nprint(s)\n", "script"); + fail("expected invalid escape sequence"); + } catch (LuaError e) { + assertTrue("unexpected error: " + e.getMessage(), + e.getMessage().indexOf("invalid escape sequence") >= 0); + } + } + public void testInlineTable() { String s = "A = {g=10}\n"+ "print( A )\n";