From fa19d4758f38daa5d0ea6557af9a64721cfcce07 Mon Sep 17 00:00:00 2001 From: Sean Owen Date: Sat, 24 Sep 2022 09:23:49 -0500 Subject: [PATCH] Possible fix for https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38486#c10 --- .../decoder/DecodedBitStreamParser.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java index 63ec7ccbf..b86a147d8 100644 --- a/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java +++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java @@ -220,22 +220,38 @@ final class DecodedBitStreamParser { case MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT: ECIStringBuilder segmentCount = new ECIStringBuilder(); codeIndex = numericCompaction(codewords, codeIndex + 1, segmentCount); - resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString())); + try { + resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString())); + } catch (NumberFormatException nfe) { + throw FormatException.getFormatInstance(); + } break; case MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP: ECIStringBuilder timestamp = new ECIStringBuilder(); codeIndex = numericCompaction(codewords, codeIndex + 1, timestamp); - resultMetadata.setTimestamp(Long.parseLong(timestamp.toString())); + try { + resultMetadata.setTimestamp(Long.parseLong(timestamp.toString())); + } catch (NumberFormatException nfe) { + throw FormatException.getFormatInstance(); + } break; case MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM: ECIStringBuilder checksum = new ECIStringBuilder(); codeIndex = numericCompaction(codewords, codeIndex + 1, checksum); - resultMetadata.setChecksum(Integer.parseInt(checksum.toString())); + try { + resultMetadata.setChecksum(Integer.parseInt(checksum.toString())); + } catch (NumberFormatException nfe) { + throw FormatException.getFormatInstance(); + } break; case MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE: ECIStringBuilder fileSize = new ECIStringBuilder(); codeIndex = numericCompaction(codewords, codeIndex + 1, fileSize); - resultMetadata.setFileSize(Long.parseLong(fileSize.toString())); + try { + resultMetadata.setFileSize(Long.parseLong(fileSize.toString())); + } catch (NumberFormatException nfe) { + throw FormatException.getFormatInstance(); + } break; default: throw FormatException.getFormatInstance();