CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positive
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 85/100
Direção de pesquisa
Comece em com.google.cloud.firestore.encoding.CustomClassMapper.java, em convertBigDecimal, e rastreie como DocumentSnapshot.toObject(Class) chega até ele. Reproduza a desserialização de um valor negativo de ponto flutuante do Firestore em um campo BigDecimal. Está concluído quando o sinal negativo é preservado e as conversões existentes de inteiros, BigDecimal e String continuam funcionando.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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");
}
}
- Linguagem predominante
- Java
- Estrelas
- 2.1k
- Forks
- 1.2k
- Merge médio
- 2d 7h
- PRs com merge (30d)
- 153
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de googleapis/google-cloud-java
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
googleapis/google-cloud-java#14132 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
googleapis/google-cloud-java#14025 ·
Mantenedores costumam responder em até 1 dia
-
priority: p2 type: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
googleapis/google-cloud-java#13255 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
priority: p3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
googleapis/google-cloud-java#13032 ·
Mantenedores costumam responder em até 1 dia
-
priority: p3 type: feature request
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
googleapis/google-cloud-java#12071 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de googleapis/google-cloud-java
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Content
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
RunestoneInteractive/rs#1559 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
inu-appcenter/memorIN-backend#298 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
opendataloader-project/opendataloader-pdf#757 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
redhat-developer/intellij-quarkus#1626 ·