CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positive
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 85/100
Direzione di ricerca
Inizia in com.google.cloud.firestore.encoding.CustomClassMapper.java, in convertBigDecimal, e segui il percorso con cui DocumentSnapshot.toObject(Class) lo raggiunge. Riproduci la deserializzazione di un valore negativo in virgola mobile di Firestore in un campo BigDecimal. Il lavoro è completato quando il segno negativo viene preservato e le conversioni esistenti di interi, BigDecimal e String continuano a funzionare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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");
}
}
- Lingua principale
- Java
- Stelle
- 2.1k
- Fork
- 1.2k
- Merge medio
- 2g 7h
- PR unite (30g)
- 153
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di googleapis/google-cloud-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
googleapis/google-cloud-java#14132 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
googleapis/google-cloud-java#14025 ·
I maintainer di solito rispondono entro 1 giorno
-
priority: p2 type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
googleapis/google-cloud-java#13255 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
priority: p3
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
googleapis/google-cloud-java#13032 ·
I maintainer di solito rispondono entro 1 giorno
-
priority: p3 type: feature request
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
googleapis/google-cloud-java#12071 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di googleapis/google-cloud-java
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Content
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
RunestoneInteractive/rs#1559 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
inu-appcenter/memorIN-backend#298 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
opendataloader-project/opendataloader-pdf#757 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
redhat-developer/intellij-quarkus#1626 ·