Index: xfa/src/fxbarcode/BC_TwoDimWriter.cpp |
diff --git a/xfa/src/fxbarcode/BC_TwoDimWriter.cpp b/xfa/src/fxbarcode/BC_TwoDimWriter.cpp |
index d6d66144496022295876c36d7cfa32bb3845bcd9..b270378a874ff441f0c74469844053f3945400a6 100644 |
--- a/xfa/src/fxbarcode/BC_TwoDimWriter.cpp |
+++ b/xfa/src/fxbarcode/BC_TwoDimWriter.cpp |
@@ -4,10 +4,14 @@ |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+#include <algorithm> |
+ |
+#include "third_party/base/numerics/safe_math.h" |
#include "xfa/src/fxbarcode/barcode.h" |
#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" |
#include "xfa/src/fxbarcode/BC_Writer.h" |
#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" |
+ |
CBC_TwoDimWriter::CBC_TwoDimWriter() { |
m_iCorrectLevel = 1; |
m_bFixedSize = TRUE; |
@@ -92,18 +96,18 @@ void CBC_TwoDimWriter::RenderResult(uint8_t* code, |
int32_t& e) { |
int32_t inputWidth = codeWidth; |
int32_t inputHeight = codeHeight; |
- int32_t tempWidth = inputWidth + (1 << 1); |
- int32_t tempHeight = inputHeight + (1 << 1); |
- FX_FLOAT moduleHSize = (FX_FLOAT)FX_MIN(m_ModuleWidth, m_ModuleHeight); |
- if (moduleHSize > 8) { |
- moduleHSize = 8; |
- } else if (moduleHSize < 1) { |
- moduleHSize = 1; |
- } |
- int32_t outputWidth = (int32_t)FX_MAX(tempWidth * moduleHSize, tempWidth); |
- int32_t outputHeight = (int32_t)FX_MAX(tempHeight * moduleHSize, tempHeight); |
- int32_t multiX = 1; |
- int32_t multiY = 1; |
+ int32_t tempWidth = inputWidth + 2; |
+ int32_t tempHeight = inputHeight + 2; |
+ FX_FLOAT moduleHSize = std::min(m_ModuleWidth, m_ModuleHeight); |
+ moduleHSize = std::min(moduleHSize, 8.0f); |
+ moduleHSize = std::max(moduleHSize, 1.0f); |
+ pdfium::base::CheckedNumeric<int32_t> scaledWidth = tempWidth; |
+ pdfium::base::CheckedNumeric<int32_t> scaledHeight = tempHeight; |
+ scaledWidth *= moduleHSize; |
+ scaledHeight *= moduleHSize; |
+ |
+ int32_t outputWidth = scaledWidth.ValueOrDie(); |
+ int32_t outputHeight = scaledHeight.ValueOrDie(); |
if (m_bFixedSize) { |
if (m_Width < outputWidth || m_Height < outputHeight) { |
e = BCExceptionBitmapSizeError; |
@@ -117,10 +121,10 @@ void CBC_TwoDimWriter::RenderResult(uint8_t* code, |
outputHeight * ceil((FX_FLOAT)m_Height / (FX_FLOAT)outputHeight)); |
} |
} |
- multiX = (int32_t)ceil((FX_FLOAT)outputWidth / (FX_FLOAT)tempWidth); |
- multiY = (int32_t)ceil((FX_FLOAT)outputHeight / (FX_FLOAT)tempHeight); |
+ int32_t multiX = (int32_t)ceil((FX_FLOAT)outputWidth / (FX_FLOAT)tempWidth); |
+ int32_t multiY = (int32_t)ceil((FX_FLOAT)outputHeight / (FX_FLOAT)tempHeight); |
if (m_bFixedSize) { |
- multiX = FX_MIN(multiX, multiY); |
+ multiX = std::min(multiX, multiY); |
multiY = multiX; |
} |
int32_t leftPadding = (outputWidth - (inputWidth * multiX)) / 2; |