From 6dd0776b961f8471c8cd9df7b49d6652c4629175 Mon Sep 17 00:00:00 2001 From: Sean Owen Date: Wed, 30 Dec 2020 15:44:03 -0600 Subject: [PATCH] Prevent MaxiCode sampler from sampling off the edge of the image. --- .../main/java/com/google/zxing/maxicode/MaxiCodeReader.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java b/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java index bf52da707..10319007c 100644 --- a/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java +++ b/core/src/main/java/com/google/zxing/maxicode/MaxiCodeReader.java @@ -100,7 +100,11 @@ public final class MaxiCodeReader implements Reader { for (int y = 0; y < MATRIX_HEIGHT; y++) { int iy = top + (y * height + height / 2) / MATRIX_HEIGHT; for (int x = 0; x < MATRIX_WIDTH; x++) { - int ix = left + (x * width + width / 2 + (y & 0x01) * width / 2) / MATRIX_WIDTH; + // srowen: I don't quite understand why the formula below is necessary, but it + // can walk off the image if left + width = the right boundary. So cap it. + int ix = left + Math.min( + (x * width + width / 2 + (y & 0x01) * width / 2) / MATRIX_WIDTH, + width); if (image.get(ix, iy)) { bits.set(x, y); }