Fix out of bound error in CBC_ErrorCorrection::EncodeECC200().
BUG=chromium:912125
Change-Id: I2284962d2c56bd0eb3a4450bd0fdca53953f443a
Reviewed-on: https://pdfium-review.googlesource.com/c/46610
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxbarcode/datamatrix/BC_ErrorCorrection.cpp b/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
index 9f6a67f..9c6ff7d 100644
--- a/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
+++ b/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
@@ -22,6 +22,7 @@
#include "fxbarcode/datamatrix/BC_ErrorCorrection.h"
+#include <algorithm>
#include <vector>
#include "fxbarcode/datamatrix/BC_Encoder.h"
@@ -201,6 +202,13 @@
errorSizes[i] = symbolInfo->getErrorLengthForInterleavedBlock();
startPos[i] = i > 0 ? startPos[i - 1] + dataSizes[i] : 0;
}
+
+ size_t max_error_sizes =
+ *std::max_element(errorSizes.begin(), errorSizes.end()) * blockCount;
+ sb.Reserve(sb.GetLength() + max_error_sizes);
+ for (size_t i = 0; i < max_error_sizes; ++i)
+ sb.InsertAtBack(0);
+
for (size_t block = 0; block < blockCount; ++block) {
WideString temp;
if (symbolInfo->dataCapacity() > block)