Integer overflow when calling `fromJson()` on `JsonObject`
- 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
Assessment
This issue has not been assessed yet.