Fixed issue: Invalid escape sequences in string literals not raising errors (e.g. \q)

This commit is contained in:
UnlegitDqrk
2026-03-01 19:11:18 +01:00
parent 86e4d78761
commit 364dbecb17
2 changed files with 19 additions and 5 deletions

View File

@@ -552,9 +552,12 @@ public class LexState extends Constants {
continue; continue;
} }
default: { default: {
if (!isdigit(current)) if (!isdigit(current)) {
save_and_next(); /* handles \\, \", \', and \? */ if (current == '\\' || current == '"' || current == '\'')
else { /* \xxx */ save_and_next();
else
lexerror("invalid escape sequence", TK_STRING);
} else { /* \xxx */
int i = 0; int i = 0;
c = 0; c = 0;
do { do {
@@ -2150,4 +2153,4 @@ public class LexState extends Constants {
/* }====================================================================== */ /* }====================================================================== */
} }

View File

@@ -4,6 +4,7 @@ import junit.framework.TestCase;
import org.luaj.vm2.Globals; import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaDouble; import org.luaj.vm2.LuaDouble;
import org.luaj.vm2.LuaInteger; import org.luaj.vm2.LuaInteger;
import org.luaj.vm2.LuaError;
import org.luaj.vm2.LuaValue; import org.luaj.vm2.LuaValue;
import org.luaj.vm2.libs.jse.JsePlatform; import org.luaj.vm2.libs.jse.JsePlatform;
@@ -61,7 +62,17 @@ public class SimpleTests extends TestCase {
"print( 2 )\n"; "print( 2 )\n";
doTest( s ); 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() { public void testInlineTable() {
String s = "A = {g=10}\n"+ String s = "A = {g=10}\n"+
"print( A )\n"; "print( A )\n";