[java-firestore] CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positive
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 85/100
Rechercherichtung
Beginne in com.google.cloud.firestore.encoding.CustomClassMapper.java bei convertBigDecimal und verfolge, wie DocumentSnapshot.toObject(Class) dorthin gelangt. Reproduziere die Deserialisierung eines negativen Firestore-Gleitkommawerts in ein BigDecimal-Feld. Als abgeschlossen gilt die Aufgabe, wenn das negative Vorzeichen erhalten bleibt und die bestehenden Konvertierungen für Ganzzahlen, BigDecimal und String weiterhin funktionieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Environment
- Artifact:
com.google.cloud:google-cloud-firestore(also used viacom.google.firebase:firebase-admin) - Affected Versions:
3.21.1through3.48.0(latest) - File:
com.google.cloud.firestore.encoding.CustomClassMapper.java
Describe the Bug
When deserializing a Firestore document containing a negative floating point number into a Java POJO field of type java.math.BigDecimal using DocumentSnapshot.toObject(Class<T>), the negative value is converted to a positive number.
Offending Code
In com.google.cloud.firestore.encoding.CustomClassMapper.java :
private static BigDecimal convertBigDecimal(Object o, DeserializeContext.ErrorPath errorPath) {
if (o instanceof Integer) {
return BigDecimal.valueOf(((Integer) o).intValue());
} else if (o instanceof Long) {
return BigDecimal.valueOf(((Long) o).longValue());
} else if (o instanceof Double) {
return BigDecimal.valueOf(((Double) o).doubleValue()).abs(); // <--- Calls .abs()
} else if (o instanceof BigDecimal) {
return (BigDecimal) o;
} else if (o instanceof String) {
return new BigDecimal((String) o);
} else {
throw errorPath.deserializeError(
"Failed to convert a value of type " + o.getClass().getName() + " to BigDecimal");
}
}
- Vorherrschende Sprache
- Java
- Sterne
- 2.1k
- Forks
- 1.2k
- Ø Merge
- 2 T. 15 Std.
- Gemergte PRs (30 T.)
- 167
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus googleapis/google-cloud-java
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
googleapis/google-cloud-java#14132 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
googleapis/google-cloud-java#14025 ·
Maintainer antworten meist innerhalb von 1 Tag
-
priority: p2 type: bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
googleapis/google-cloud-java#13255 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
priority: p3
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
googleapis/google-cloud-java#13032 ·
Maintainer antworten meist innerhalb von 1 Tag
-
priority: p3 type: feature request
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
googleapis/google-cloud-java#12071 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in googleapis/google-cloud-java
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
beehive-lab/TornadoVM#1151 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
FasterXML/jackson-dataformats-binary#823 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag