diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java b/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java index 52c9d69..0fb22b6 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java +++ b/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java @@ -229,6 +229,20 @@ public final class QrSegment { return (int)result; } + static int getTotalBits(List segments, int version) { + Objects.requireNonNull(segments); + long TotalBits = 0; + for (QrSegment segment : segments) { + Objects.requireNonNull(segment); + int characterCountBits = segment.mode.numCharCountBits(version); + if (segment.numberOfCharacters >= (1 << characterCountBits)) + return -1; // The segment's length doesn't fit the field's bit width + TotalBits += 4L + characterCountBits + segment.data.bitLength(); + if (TotalBits > Integer.MAX_VALUE) + return -1; // The sum will overflow an int type + } + return (int)TotalBits; + } /*---- Constants ----*/