From 3e30a852a1d9b3ceb35ddb8350bda41f02fab859 Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 11 Jul 2026 23:15:56 -0700 Subject: [PATCH 1/2] fix: flush of the pending high surrogate --- .../builtins/modules/json/JSONScannerBuiltins.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java index ba2b705988..e1aa6b3fe1 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java @@ -880,6 +880,9 @@ private static TruffleString parseStringUnicodeSlowpath(VirtualFrame frame, Boun while (idx < length) { int c = codePointAtIndexNode.execute(string, idx++); if (c == '"') { + if (highSurrogate != 0) { + appendCodePointNode.execute(builder, highSurrogate, 1, true); + } // we reached the end of the string literal nextIdx.value = idx; return builderToStringNode.execute(builder); @@ -934,6 +937,10 @@ private static TruffleString parseStringUnicodeSlowpath(VirtualFrame frame, Boun } if (isLowSurrogate(c) && highSurrogate != 0) { c = Character.toCodePoint(highSurrogate, (char) c); + highSurrogate = 0; + } else if (highSurrogate != 0) { + appendCodePointNode.execute(builder, highSurrogate, 1, true); + highSurrogate = 0; } if (isHighSurrogate(c)) { highSurrogate = (char) c; @@ -946,6 +953,10 @@ private static TruffleString parseStringUnicodeSlowpath(VirtualFrame frame, Boun if (strict && c < 0x20) { throw decodeError(frame, boundaryCallData, inliningTarget, errorProfile, raisingNode, string, idx - 1, ErrorMessages.INVALID_CTRL_CHARACTER_AT); } + if (highSurrogate != 0 ) { + appendCodePointNode.execute(builder, highSurrogate, 1, true); + highSurrogate = 0; + } appendCodePointNode.execute(builder, c, 1, true); } } From 77501a5778f7a8258ce404489d746a02c5ef4f2c Mon Sep 17 00:00:00 2001 From: boris Date: Sun, 12 Jul 2026 22:18:53 -0700 Subject: [PATCH 2/2] chore: fmt --- .../graal/python/builtins/modules/PosixModuleBuiltins.java | 3 ++- .../python/builtins/modules/json/JSONScannerBuiltins.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java index a174f1ba5b..0950c41978 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java @@ -326,7 +326,8 @@ public void postInitialize(Python3Core core) { PosixSupportLibrary posixLib = PosixSupportLibrary.getUncached(); Object posixSupport = core.getContext().getPosixSupport(); PythonModule posix = PythonLanguage.getPythonOS() == PythonOS.PLATFORM_WIN32 - ? core.lookupBuiltinModule(T_NT) : core.lookupBuiltinModule(T_POSIX); + ? core.lookupBuiltinModule(T_NT) + : core.lookupBuiltinModule(T_POSIX); if (posixLib.getBackend(posixSupport).toJavaStringUncached().equals("java")) { posix.setAttribute(toTruffleStringUncached("geteuid"), PNone.NO_VALUE); diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java index e1aa6b3fe1..4803bafdab 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONScannerBuiltins.java @@ -953,7 +953,7 @@ private static TruffleString parseStringUnicodeSlowpath(VirtualFrame frame, Boun if (strict && c < 0x20) { throw decodeError(frame, boundaryCallData, inliningTarget, errorProfile, raisingNode, string, idx - 1, ErrorMessages.INVALID_CTRL_CHARACTER_AT); } - if (highSurrogate != 0 ) { + if (highSurrogate != 0) { appendCodePointNode.execute(builder, highSurrogate, 1, true); highSurrogate = 0; }