commit 7d1b2277ed5994f387f108bed31c900b6cdbaa4e
parent 397226517727e583bbd1ddd39845c37e65f1a99f
Author: Marc Stibane <marc@taler.net>
Date: Fri, 14 Aug 2026 08:02:20 +0200
clamp shiftLeft
Diffstat:
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/taler-swift/Sources/taler-swift/Amount.swift b/taler-swift/Sources/taler-swift/Amount.swift
@@ -367,7 +367,8 @@ public final class Amount: Codable, Hashable, @unchecked Sendable, CustomStringC
public func shiftLeft(add digit: UInt8, _ inputDigits: UInt) {
if inputDigits > 0 {
// how many digits to shift right (e.g. inputD=2 ==> shift:=6)
- let shift = Self.fractionalBaseDigits - inputDigits
+ let digits = min(inputDigits, Self.fractionalBaseDigits)
+ let shift = Self.fractionalBaseDigits - digits
// mask to zero out fractions smaller than inputDigits
let shiftMask = fractionalBase(shift)
@@ -406,7 +407,8 @@ public final class Amount: Codable, Hashable, @unchecked Sendable, CustomStringC
/// Sets all fractional digits after inputDigits to 0
public func mask(_ inputDigits: UInt) {
- let mask = fractionalBase(Self.fractionalBaseDigits - inputDigits)
+ let digits = min(inputDigits, Self.fractionalBaseDigits)
+ let mask = fractionalBase(Self.fractionalBaseDigits - digits)
let remainder = fraction % mask
self.fraction -= remainder
}