Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positive

Aberta Para iniciantes
#14,533 0 comentários 0 reações 0 responsáveis Ver no GitHub

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
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
java
Domínio
databases

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 via com.google.firebase:firebase-admin)
  • Affected Versions: 3.21.1 through 3.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

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de googleapis/google-cloud-java

Todas as issues de googleapis/google-cloud-java

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.