Skip to content

Commit

Permalink
fix: numeric binary decode for even 10 thousands
Browse files Browse the repository at this point in the history
binary numeric values which represented integers multiples of 10,000
from 10,000-9,990,000 were not decoded correctly

fixes pgjdbc#2326
  • Loading branch information
bokken committed Oct 28, 2021
1 parent 6711302 commit 53f5acc
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
3 changes: 3 additions & 0 deletions pgjdbc/src/main/java/org/postgresql/util/ByteConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,9 @@ public static Number numeric(byte [] bytes, int pos, int numBytes) {
if (unscaledBI == null) {
unscaledBI = BigInteger.valueOf(unscaledInt);
}
while (effectiveWeight-- > 0) {
unscaledBI = unscaledBI.multiply(BI_TEN_THOUSAND);
}
if (effectiveScale > 0) {
unscaledBI = unscaledBI.multiply(tenPower(effectiveScale));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ public static Iterable<Object[]> data() {
numbers.add(new Object[] {new BigDecimal(BigInteger.valueOf(1234567890987654321L), -5)});
numbers.add(new Object[] {new BigDecimal(BigInteger.valueOf(-1234567890987654321L), -3)});
numbers.add(new Object[] {new BigDecimal(BigInteger.valueOf(6), -8)});
numbers.add(new Object[] {new BigDecimal("20000").setScale(20)});
numbers.add(new Object[] {new BigDecimal("20000.00000000000000000000")});
numbers.add(new Object[] {new BigDecimal("1000000").setScale(20)});
numbers.add(new Object[] {new BigDecimal("10000000000000000000000000000000000000").setScale(20)});
numbers.add(new Object[] {new BigDecimal("90000000000000000000000000000000000000")});
return numbers;
}

Expand Down

0 comments on commit 53f5acc

Please sign in to comment.