diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java b/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java index 8331b3202..d5e1e25b2 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 325a3c420..b4da53fe1 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java @@ -3359,7 +3359,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; @@ -4469,7 +4475,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 fdd7b74ff..6fbf93c64 100644 --- a/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java +++ b/core/src/main/java/com/alibaba/fastjson2/util/IOUtils.java @@ -1194,10 +1194,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; }