Replace JBig2PageInfo::m_cFlags with m_bDefaultPixelValue.
Since bit 2 in JBig2PageInfo::m_cFlags is the only bit that
CJBig2_Context cares about, store just that bit in JBig2PageInfo.
Change-Id: If847c0a03593914547415ee4f08ac6fac2b17673
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/89810
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/jbig2/JBig2_Context.cpp b/core/fxcodec/jbig2/JBig2_Context.cpp
index b21924a..692eb4a 100644
--- a/core/fxcodec/jbig2/JBig2_Context.cpp
+++ b/core/fxcodec/jbig2/JBig2_Context.cpp
@@ -319,18 +319,21 @@
return JBig2_Result::kFailure;
return ParseGenericRefinementRegion(pSegment);
case 48: {
- uint16_t wTemp;
+ uint8_t segment_flags;
+ uint16_t striping_info;
auto pPageInfo = std::make_unique<JBig2PageInfo>();
if (m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0 ||
m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0 ||
m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0 ||
m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0 ||
- m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0 ||
- m_pStream->readShortInteger(&wTemp) != 0) {
+ m_pStream->read1Byte(&segment_flags) != 0 ||
+ m_pStream->readShortInteger(&striping_info) != 0) {
return JBig2_Result::kFailure;
}
- pPageInfo->m_bIsStriped = !!(wTemp & 0x8000);
- pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff;
+
+ pPageInfo->m_bDefaultPixelValue = !!(segment_flags & 4);
+ pPageInfo->m_bIsStriped = !!(striping_info & 0x8000);
+ pPageInfo->m_wMaxStripeSize = striping_info & 0x7fff;
bool bMaxHeight = (pPageInfo->m_dwHeight == 0xffffffff);
if (bMaxHeight && !pPageInfo->m_bIsStriped)
pPageInfo->m_bIsStriped = true;
@@ -346,10 +349,11 @@
return JBig2_Result::kFailure;
}
- m_pPage->Fill(!!(pPageInfo->m_cFlags & 4));
+ m_pPage->Fill(pPageInfo->m_bDefaultPixelValue);
m_PageInfoList.push_back(std::move(pPageInfo));
m_bInPage = true;
- } break;
+ break;
+ }
case 49:
m_bInPage = false;
return JBig2_Result::kEndReached;
@@ -803,7 +807,7 @@
const auto& pPageInfo = m_PageInfoList.back();
if ((pPageInfo->m_bIsStriped == 1) &&
(ri.y + ri.height > m_pPage->height())) {
- m_pPage->Expand(ri.y + ri.height, !!(pPageInfo->m_cFlags & 4));
+ m_pPage->Expand(ri.y + ri.height, pPageInfo->m_bDefaultPixelValue);
}
}
m_pPage->ComposeFrom(ri.x, ri.y, pSegment->m_Image.get(),
@@ -919,7 +923,7 @@
const auto& pPageInfo = m_PageInfoList.back();
if (pPageInfo->m_bIsStriped == 1 &&
ri.y + ri.height > m_pPage->height()) {
- m_pPage->Expand(ri.y + ri.height, !!(pPageInfo->m_cFlags & 4));
+ m_pPage->Expand(ri.y + ri.height, pPageInfo->m_bDefaultPixelValue);
}
}
m_pPage->ComposeFrom(ri.x, ri.y, pSegment->m_Image.get(),
@@ -986,7 +990,7 @@
if ((pPageInfo->m_bIsStriped == 1) &&
(m_ri.y + m_ri.height > m_pPage->height())) {
m_pPage->Expand(m_ri.y + m_ri.height,
- !!(pPageInfo->m_cFlags & 4));
+ pPageInfo->m_bDefaultPixelValue);
}
}
const FX_RECT& rect = m_pGRD->GetReplaceRect();
@@ -1019,7 +1023,7 @@
JBig2PageInfo* pPageInfo = m_PageInfoList.back().get();
if ((pPageInfo->m_bIsStriped == 1) &&
(m_ri.y + m_ri.height > m_pPage->height())) {
- m_pPage->Expand(m_ri.y + m_ri.height, !!(pPageInfo->m_cFlags & 4));
+ m_pPage->Expand(m_ri.y + m_ri.height, pPageInfo->m_bDefaultPixelValue);
}
}
const FX_RECT& rect = m_pGRD->GetReplaceRect();
@@ -1092,7 +1096,7 @@
JBig2PageInfo* pPageInfo = m_PageInfoList.back().get();
if ((pPageInfo->m_bIsStriped == 1) &&
(ri.y + ri.height > m_pPage->height())) {
- m_pPage->Expand(ri.y + ri.height, !!(pPageInfo->m_cFlags & 4));
+ m_pPage->Expand(ri.y + ri.height, pPageInfo->m_bDefaultPixelValue);
}
}
m_pPage->ComposeFrom(ri.x, ri.y, pSegment->m_Image.get(),
diff --git a/core/fxcodec/jbig2/JBig2_Page.h b/core/fxcodec/jbig2/JBig2_Page.h
index 3089e48..6fc62a9 100644
--- a/core/fxcodec/jbig2/JBig2_Page.h
+++ b/core/fxcodec/jbig2/JBig2_Page.h
@@ -14,7 +14,8 @@
uint32_t m_dwHeight;
uint32_t m_dwResolutionX;
uint32_t m_dwResolutionY;
- uint8_t m_cFlags;
+ // Page segment flags, bit 2.
+ bool m_bDefaultPixelValue;
bool m_bIsStriped;
uint16_t m_wMaxStripeSize;
};