CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positive
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
com.google.cloud.firestore.encoding.CustomClassMapper.java の convertBigDecimal から開始し、DocumentSnapshot.toObject(Class) がそこに到達する経路を追跡します。負の Firestore 浮動小数点値を BigDecimal フィールドにデシリアライズする処理を再現します。負号が保持され、既存の整数、BigDecimal、String の変換が引き続き機能すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
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");
}
}
- 主要言語
- Java
- スター
- 2.1k
- フォーク
- 1.2k
- 平均マージ
- 2日 7時間
- マージ済み PR(30日)
- 153
環境構築
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
googleapis/google-cloud-java のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
googleapis/google-cloud-java#14132 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
googleapis/google-cloud-java#14025 ·
メンテナーはふだん 1 日以内に返信
-
priority: p2 type: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
googleapis/google-cloud-java#13255 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
priority: p3
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
googleapis/google-cloud-java#13032 ·
メンテナーはふだん 1 日以内に返信
-
priority: p3 type: feature request
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
googleapis/google-cloud-java#12071 ·
メンテナーはふだん 1 日以内に返信
googleapis/google-cloud-java の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
feature triaged
難易度 1/5 1時間未満 初心者へのやさしさ 75/100
Graylog2/graylog2-server#27549 ·
メンテナーはふだん 1 日以内に返信
-
component/zeebe kind/bug
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
UniversalMediaServer/UniversalMediaServer#6356 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
refinedmods/refinedstorage2#1414 · コメント 1 件 ·