diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java b/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java index 62a39f971..f4d8ee49d 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java @@ -80,7 +80,10 @@ final class JSONReaderASCII if (offset < end && bytes[offset] == first) { offset++; } else if (offset + 4 < end - && IOUtils.isNULL(bytes, offset) + && bytes[offset] == 'n' + && bytes[offset + 1] == 'u' + && bytes[offset + 2] == 'l' + && bytes[offset + 3] == 'l' && bytes[offset + 4] == first ) { offset += 5; diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java b/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java index 6c7e2b96f..251c876ba 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java @@ -3361,7 +3361,13 @@ class JSONReaderUTF8 boolValue = true; valueType = JSON_TYPE_BOOL; ch = offset == end ? EOI : bytes[offset++]; - } else if (ch == 'f' && offset + 3 < end && IOUtils.isALSE(bytes, offset)) { + } else if (ch == 'f' + && offset + 3 < end + && bytes[offset] == 'a' + && bytes[offset + 1] == 'l' + && bytes[offset + 2] == 's' + && bytes[offset + 3] == 'e' + ) { valid = true; offset += 4; boolValue = false; @@ -4699,7 +4705,10 @@ class JSONReaderUTF8 if (offset < end && bytes[offset] == first) { offset++; } else if (offset + 4 < end - && IOUtils.isNULL(bytes, offset) + && bytes[offset] == 'n' + && bytes[offset + 1] == 'u' + && bytes[offset + 2] == 'l' + && bytes[offset + 3] == 'l' && bytes[offset + 4] == first ) { offset += 5; diff --git a/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java b/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java index 5daf1645d..f7a3502b1 100644 --- a/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java +++ b/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java @@ -1291,10 +1291,6 @@ public class IOUtils { return (d & 0xF) * 10 + (d >> 16); } - public static boolean isNULL(byte[] buf, int pos) { - return UNSAFE.getInt(buf, ARRAY_BYTE_BASE_OFFSET + pos) == NULL_32; - } - public static boolean isALSE(byte[] buf, int pos) { return UNSAFE.getInt(buf, ARRAY_BYTE_BASE_OFFSET + pos) == ALSE; }