diff --git a/src/main/java/com/jsoniter/IterImpl.java b/src/main/java/com/jsoniter/IterImpl.java index ad779fd8..4b24760f 100644 --- a/src/main/java/com/jsoniter/IterImpl.java +++ b/src/main/java/com/jsoniter/IterImpl.java @@ -189,8 +189,13 @@ public static Any readAny(JsonIterator iter) throws IOException { skipFixedBytes(iter, 4); return Any.wrap(false); case 'n': - skipFixedBytes(iter, 3); - return Any.wrap((Object) null); + if (readByte(iter) == 'u' && + readByte(iter) == 'l' && + readByte(iter) == 'l') { + return Any.wrap((Object) null); + } else { + throw iter.reportError("readAny", "expected 'null' but found something else"); + } case '[': skipArray(iter); return Any.lazyArray(iter.buf, start, iter.head); diff --git a/src/main/java/com/jsoniter/IterImplForStreaming.java b/src/main/java/com/jsoniter/IterImplForStreaming.java index 2cef3a16..cfd43a82 100644 --- a/src/main/java/com/jsoniter/IterImplForStreaming.java +++ b/src/main/java/com/jsoniter/IterImplForStreaming.java @@ -334,9 +334,15 @@ public static Any readAny(JsonIterator iter) throws IOException { iter.skipStartedAt = -1; return Any.wrap(false); case 'n': - skipFixedBytes(iter, 3); - iter.skipStartedAt = -1; - return Any.wrap((Object) null); + if (nextToken(iter) == 'u' && + nextToken(iter) == 'l' && + nextToken(iter) == 'l') { + + iter.skipStartedAt = -1; + return Any.wrap((Object) null); + } else { + throw iter.reportError("readAny", "expected 'null' but found something else"); + } case '[': skipArray(iter); copied = copySkippedBytes(iter); diff --git a/src/main/java/com/jsoniter/IterImplObject.java b/src/main/java/com/jsoniter/IterImplObject.java index 64468d94..95316c91 100644 --- a/src/main/java/com/jsoniter/IterImplObject.java +++ b/src/main/java/com/jsoniter/IterImplObject.java @@ -8,8 +8,12 @@ public static final String readObject(JsonIterator iter) throws IOException { byte c = IterImpl.nextToken(iter); switch (c) { case 'n': - IterImpl.skipFixedBytes(iter, 3); - return null; + if (IterImpl.readByte(iter) == 'u' && + IterImpl.readByte(iter) == 'l' && + IterImpl.readByte(iter) == 'l') { + return null; + } + throw iter.reportError("readObject", "expected 'null' but found something else"); case '{': c = IterImpl.nextToken(iter); if (c == '"') { diff --git a/src/main/java/com/jsoniter/IterImplSkip.java b/src/main/java/com/jsoniter/IterImplSkip.java index c9a82afd..7fc61934 100644 --- a/src/main/java/com/jsoniter/IterImplSkip.java +++ b/src/main/java/com/jsoniter/IterImplSkip.java @@ -37,8 +37,13 @@ public static final void skip(JsonIterator iter) throws IOException { return; case 't': case 'n': - IterImpl.skipFixedBytes(iter, 3); // true or null - return; + if (IterImpl.readByte(iter) == 'u' && + IterImpl.readByte(iter) == 'l' && + IterImpl.readByte(iter) == 'l') { + return; + } else { + throw iter.reportError("skip", "expected 'null' but found something else"); + } case 'f': IterImpl.skipFixedBytes(iter, 4); // false return;