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;
}
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 {
/* }====================================================================== */
}
}

View File

@@ -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";