google / google/gson

Integer overflow when calling `fromJson()` on `JsonObject`

Open
#1,994 2 comments 0 reactions 0 assignees Claimed by @dctrue2 View on GitHub
bug
Dominant language
Java
Stars
24.2k
Forks
4.5k
Avg merge
6d 4h
Merged PRs (30d)
12

Description

# Gson version
2.8.8

# Java / Android version
11

# Description
I'm using `fromJson()` to convert between a `JsonObject` and a POJO. When the `JsonObject` has a `long` primitive property, and I convert to an `int` on the POJO, an overflow occurs.

On the other hand, when I convert from string to the POJO, an exception gets thrown (as expected).

## Expected behavior
Exception when putting a `long` primitive value in an `int` property in `fromJson()`.

## Actual behavior
No exception, but incorrectly set `int` property.

# Reproduction steps

```
package domain.drawing;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class MyClass {

public int foo;

public static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("foo", 10000000000L);
System.out.println("-- fromJson on JsonObject: ");
System.out.println(new Gson().fromJson(jsonObject, MyClass.class));

System.out.println("");
System.out.println("-- fromJson on string: ");
System.out.println(new Gson().fromJson("{foo: 10000000000}", MyClass.class));
}

@Override
public String toString() {
return Integer.toString(foo);
}
}
```

Running this main method outputs:

```
-- fromJson on JsonObject:
1410065408

-- fromJson on string:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Expected an int but was 10000000000 at line 1 column 18 path $.foo
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:231)
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:221)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
at com.google.gson.Gson.fromJson(Gson.java:932)
at com.google.gson.Gson.fromJson(Gson.java:897)
at com.google.gson.Gson.fromJson(Gson.java:846)
at com.google.gson.Gson.fromJson(Gson.java:817)
at domain.drawing.MyClass.main(MyClass.java:18)
Caused by: java.lang.NumberFormatException: Expected an int but was 10000000000 at line 1 column 18 path $.foo
at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1171)
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:229)
... 8 more

Process finished with exit code 1
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.