Workaround for codes that fail to include (required) final TERMINATOR mode indicator
authorsrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Mon, 7 Apr 2008 22:05:40 +0000 (22:05 +0000)
committersrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Mon, 7 Apr 2008 22:05:40 +0000 (22:05 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@351 59b500cc-1b3d-0410-9834-0bbf25fbcc57

core/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java

index b53a7cf..d253ef9 100644 (file)
@@ -60,7 +60,12 @@ final class DecodedBitStreamParser {
     Mode mode;
     do {
       // While still another segment to read...
-      mode = Mode.forBits(bits.readBits(4)); // mode is encoded by 4 bits
+      if (bits.available() == 0) {
+        // OK, assume we're done. Really, a TERMINATOR mode should have been recorded here
+        mode = Mode.TERMINATOR;
+      } else {
+        mode = Mode.forBits(bits.readBits(4)); // mode is encoded by 4 bits
+      }
       if (!mode.equals(Mode.TERMINATOR)) {
         // How many characters will follow, encoded in this mode?
         int count = bits.readBits(mode.getCharacterCountBits(version));