From 9a2421997e83ec803c88ea370a2d102052699d3b Mon Sep 17 00:00:00 2001 From: Michele Vivoda Date: Wed, 19 Apr 2017 23:26:36 +0200 Subject: [PATCH] negative zero test and fix (#1069) --- .../main/java/com/google/gson/stream/JsonReader.java | 2 +- .../java/com/google/gson/stream/JsonReaderTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gson/src/main/java/com/google/gson/stream/JsonReader.java b/gson/src/main/java/com/google/gson/stream/JsonReader.java index 877742bf..9cbc62f4 100644 --- a/gson/src/main/java/com/google/gson/stream/JsonReader.java +++ b/gson/src/main/java/com/google/gson/stream/JsonReader.java @@ -728,7 +728,7 @@ public class JsonReader implements Closeable { } // 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 || false==negative)) { peekedLong = negative ? value : -value; pos += i; return peeked = PEEKED_LONG; diff --git a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java index d6b7a838..19ca2d23 100644 --- a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java +++ b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java @@ -560,6 +560,18 @@ public final class JsonReaderTest extends TestCase { } catch (NumberFormatException expected) { } } + + /** + * Issue 1053, negative zero. + * @throws Exception + */ + public void testNegativeZero() throws Exception { + JsonReader reader = new JsonReader(reader("[-0]")); + reader.setLenient(false); + reader.beginArray(); + assertEquals(NUMBER, reader.peek()); + assertEquals("-0", reader.nextString()); + } /** * This test fails because there's no double for 9223372036854775808, and our