From b6bbaddf4f684f4ce8a012a5612eae0e7d21f230 Mon Sep 17 00:00:00 2001 From: Project Nayuki Date: Fri, 5 Oct 2018 02:27:00 +0000 Subject: [PATCH] Updated QrCode constructor argument checks in most languages to synchronize logic. --- cpp/QrCode.cpp | 6 ++++-- java/io/nayuki/qrcodegen/QrCode.java | 6 ++++-- javascript/qrcodegen.js | 2 ++ python/qrcodegen.py | 3 --- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/cpp/QrCode.cpp b/cpp/QrCode.cpp index 1a24bf4..4500f76 100644 --- a/cpp/QrCode.cpp +++ b/cpp/QrCode.cpp @@ -120,8 +120,10 @@ QrCode::QrCode(int ver, Ecc ecl, const vector &dataCodewords, int mask) errorCorrectionLevel(ecl), modules (size, vector(size)), // Initially all white isFunction(size, vector(size)) { - if (ver < MIN_VERSION || ver > MAX_VERSION || mask < -1 || mask > 7) - throw std::domain_error("Value out of range"); + if (ver < MIN_VERSION || ver > MAX_VERSION) + throw std::domain_error("Version value out of range"); + if (mask < -1 || mask > 7) + throw std::domain_error("Mask value out of range"); size = ver * 4 + 17; // Compute ECC, draw modules, do masking diff --git a/java/io/nayuki/qrcodegen/QrCode.java b/java/io/nayuki/qrcodegen/QrCode.java index 42373d6..f26b95c 100644 --- a/java/io/nayuki/qrcodegen/QrCode.java +++ b/java/io/nayuki/qrcodegen/QrCode.java @@ -214,8 +214,10 @@ public final class QrCode { */ public QrCode(int ver, Ecc ecl, byte[] dataCodewords, int mask) { // Check arguments and initialize fields - if (ver < MIN_VERSION || ver > MAX_VERSION || mask < -1 || mask > 7) - throw new IllegalArgumentException("Value out of range"); + if (ver < MIN_VERSION || ver > MAX_VERSION) + throw new IllegalArgumentException("Version value out of range"); + if (mask < -1 || mask > 7) + throw new IllegalArgumentException("Mask value out of range"); version = ver; size = ver * 4 + 17; errorCorrectionLevel = Objects.requireNonNull(ecl); diff --git a/javascript/qrcodegen.js b/javascript/qrcodegen.js index d9567bf..b3010e3 100644 --- a/javascript/qrcodegen.js +++ b/javascript/qrcodegen.js @@ -77,6 +77,8 @@ var qrcodegen = new function() { throw "Version value out of range"; if (mask < -1 || mask > 7) throw "Mask value out of range"; + if (!(errCorLvl instanceof Ecc)) + throw "QrCode.Ecc expected"; var size = version * 4 + 17; // Initialize both grids to be size*size arrays of Boolean false diff --git a/python/qrcodegen.py b/python/qrcodegen.py index 2159850..748072b 100644 --- a/python/qrcodegen.py +++ b/python/qrcodegen.py @@ -162,9 +162,6 @@ class QrCode(object): self._size = version * 4 + 17 self._errcorlvl = errcorlvl - if len(datacodewords) != QrCode._get_num_data_codewords(version, errcorlvl): - raise ValueError("Invalid array length") - # Initialize both grids to be size*size arrays of Boolean false # The modules of this QR Code symbol (False = white, True = black). Immutable after constructor finishes self._modules = [[False] * self._size for _ in range(self._size)] # Initially all white