From 448a2d329845eef4f6716708c4450409a73cc16d Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Thu, 20 Apr 2017 15:22:06 -0700 Subject: [PATCH] Treat negative zero as a number, not a long. (#285) Updates logic from https://github.com/google/gson/issues/1053 --- moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java | 3 ++- .../test/java/com/squareup/moshi/JsonUtf8ReaderTest.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java b/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java index abe5643..d0a76f7 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java @@ -464,7 +464,8 @@ final class JsonUtf8Reader extends JsonReader { } // We've read a complete number. Decide if it's a PEEKED_LONG or a PEEKED_NUMBER. - if (last == NUMBER_CHAR_DIGIT && fitsInLong && (value != Long.MIN_VALUE || negative)) { + if (last == NUMBER_CHAR_DIGIT && fitsInLong && (value != Long.MIN_VALUE || negative) + && (value != 0 || !negative)) { peekedLong = negative ? value : -value; buffer.skip(i); return peeked = PEEKED_LONG; diff --git a/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java b/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java index ce2b05b..2eb28b7 100644 --- a/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java +++ b/moshi/src/test/java/com/squareup/moshi/JsonUtf8ReaderTest.java @@ -330,6 +330,12 @@ public final class JsonUtf8ReaderTest { assertThat(reader.nextDouble()).isEqualTo(-92233720368547758080d); } + @Test public void negativeZeroIsANumber() throws Exception { + JsonReader reader = newReader("-0"); + assertEquals(NUMBER, reader.peek()); + assertEquals("-0", reader.nextString()); + } + @Test public void quotedNumberWithEscape() throws IOException { JsonReader reader = newReader("[\"12\u00334\"]"); reader.setLenient(true);