Remove ~4KB worth of unused zeros from cxfa_graphics.cpp.
Return valid reference for out-of-bounds indices as a
defensive measure until we can be sure that this can't happen.
Change-Id: Ibc54f0c9e0cd30bf4fd6bc374866bca07520647a
Reviewed-on: https://pdfium-review.googlesource.com/c/48511
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxgraphics/cxfa_graphics.cpp b/xfa/fxgraphics/cxfa_graphics.cpp
index 3249927..5e4c556 100644
--- a/xfa/fxgraphics/cxfa_graphics.cpp
+++ b/xfa/fxgraphics/cxfa_graphics.cpp
@@ -25,15 +25,13 @@
FX_CONTEXT_Device,
};
-#define FX_HATCHSTYLE_Total 53
-
struct FX_HATCHDATA {
int32_t width;
int32_t height;
uint8_t maskBits[64];
};
-const FX_HATCHDATA hatchBitmapData[FX_HATCHSTYLE_Total] = {
+const FX_HATCHDATA kHatchBitmapData[] = {
{16, // Horizontal
16,
{
@@ -96,6 +94,23 @@
}},
};
+const FX_HATCHDATA kHatchPlaceHolder = {
+ 0,
+ 0,
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }};
+
+const FX_HATCHDATA& GetHatchBitmapData(size_t index) {
+ return index < FX_ArraySize(kHatchBitmapData) ? kHatchBitmapData[index]
+ : kHatchPlaceHolder;
+}
+
} // namespace
CXFA_Graphics::CXFA_Graphics(CFX_RenderDevice* renderDevice)
@@ -273,7 +288,8 @@
m_renderDevice->GetDIBits(bmp, 0, 0);
FX_HatchStyle hatchStyle = m_info.fillColor.GetPattern()->m_hatchStyle;
- const FX_HATCHDATA& data = hatchBitmapData[static_cast<int>(hatchStyle)];
+ const FX_HATCHDATA& data =
+ GetHatchBitmapData(static_cast<size_t>(hatchStyle));
auto mask = pdfium::MakeRetain<CFX_DIBitmap>();
mask->Create(data.width, data.height, FXDIB_1bppMask);