Fail early for data matrix barcode input that is too long.
Do not waste time in fuzzers encoding text, only to fail in later
stages.
BUG=chromium:930394
Change-Id: Id328a0e6a6273ba4f6dddfa20fe95a418fd1bfba
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/51491
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
index 2731490..34e1a76 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
@@ -120,6 +120,13 @@
// static
WideString CBC_HighLevelEncoder::EncodeHighLevel(const WideString& msg) {
+ // Per spec. Alpha numeric input is even shorter.
+ static constexpr size_t kMaxNumericInputLength = 3116;
+
+ // Exit early if the input is too long. It will fail no matter what.
+ if (msg.GetLength() > kMaxNumericInputLength)
+ return WideString();
+
CBC_EncoderContext context(msg);
if (context.HasCharactersOutsideISO88591Encoding())
return WideString();