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();