Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(990)

Unified Diff: core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp

Issue 892553002: Fix JPX image rendering that regressed due to several security fixes. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | core/src/fpdfapi/fpdf_render/render_int.h » ('j') | core/src/fpdfapi/fpdf_render/render_int.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
index 1637655e68d9f44642a9c478ce37521371158bf0..e4d20413a6240d9c1dacc64bcdec5fb196cf01b1 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
@@ -314,9 +314,6 @@ int CPDF_DIBSource::StartLoadDIBSource(CPDF_Document* pDoc, const CPDF_Stream* p
if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources, pPageResources)) {
return 0;
}
- if (m_bpc == 0 || m_nComponents == 0) {
Lei Zhang 2015/01/30 06:43:58 If you look in the CL that introduced this: https
Tom Sepez 2015/01/30 17:25:29 From the original review, I asked the question and
Lei Zhang 2015/01/30 23:00:07 I disagree with that assessment. If you follow the
jun_fang 2015/01/31 04:29:22 According to PDF standard, BitsPerComponent(bpc) i
- return 0;
- }
FX_SAFE_DWORD src_pitch = m_bpc;
src_pitch *= m_nComponents;
src_pitch *= m_Width;
@@ -567,8 +564,12 @@ int CPDF_DIBSource::CreateDecoder()
if (decoder.IsEmpty()) {
return 1;
}
- if (m_bpc == 0) {
- return 0;
+ if (decoder != FX_BSTRC("CCITTFaxDecode") &&
Lei Zhang 2015/01/30 06:43:58 I don't think |m_bpc| matters for these decoders,
jun_fang 2015/01/31 04:29:22 It's no need to check bpc for only JPX images and
+ decoder != FX_BSTRC("JPXDecode") &&
+ decoder != FX_BSTRC("JBIG2Decode")) {
+ if (m_bpc == 0) {
+ return 0;
+ }
}
FX_LPCBYTE src_data = m_pStreamAcc->GetData();
FX_DWORD src_size = m_pStreamAcc->GetSize();
@@ -578,7 +579,7 @@ int CPDF_DIBSource::CreateDecoder()
} else if (decoder == FX_BSTRC("DCTDecode")) {
m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(src_data, src_size, m_Width, m_Height,
m_nComponents, pParams ? pParams->GetInteger(FX_BSTR("ColorTransform"), 1) : 1);
- if (NULL == m_pDecoder) {
+ if (!m_pDecoder) {
FX_BOOL bTransform = FALSE;
int comps, bpc;
ICodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
@@ -617,29 +618,29 @@ int CPDF_DIBSource::CreateDecoder()
} else if (decoder == FX_BSTRC("RunLengthDecode")) {
m_pDecoder = CPDF_ModuleMgr::Get()->GetCodecModule()->GetBasicModule()->CreateRunLengthDecoder(src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc);
}
- if (m_pDecoder) {
- FX_SAFE_DWORD requested_pitch = m_bpc;
- requested_pitch *= m_nComponents;
- requested_pitch *= m_Width;
- requested_pitch += 7;
- requested_pitch /= 8;
- if (!requested_pitch.IsValid()) {
- return 0;
- }
- FX_SAFE_DWORD provided_pitch = m_pDecoder->GetBPC();
- provided_pitch *= m_pDecoder->CountComps();
- provided_pitch *= m_pDecoder->GetWidth();
- provided_pitch += 7;
- provided_pitch /= 8;
- if (!provided_pitch.IsValid()) {
- return 0;
- }
- if (provided_pitch.ValueOrDie() < requested_pitch.ValueOrDie()) {
- return 0;
- }
- return 1;
+ if (!m_pDecoder)
Lei Zhang 2015/01/30 06:43:58 This is just to put all the "return 0" cases befor
+ return 0;
+
+ FX_SAFE_DWORD requested_pitch = m_bpc;
+ requested_pitch *= m_nComponents;
+ requested_pitch *= m_Width;
+ requested_pitch += 7;
+ requested_pitch /= 8;
+ if (!requested_pitch.IsValid()) {
+ return 0;
}
- return 0;
+ FX_SAFE_DWORD provided_pitch = m_pDecoder->GetBPC();
+ provided_pitch *= m_pDecoder->CountComps();
+ provided_pitch *= m_pDecoder->GetWidth();
+ provided_pitch += 7;
+ provided_pitch /= 8;
+ if (!provided_pitch.IsValid()) {
+ return 0;
+ }
+ if (provided_pitch.ValueOrDie() < requested_pitch.ValueOrDie()) {
+ return 0;
+ }
+ return 1;
}
void CPDF_DIBSource::LoadJpxBitmap()
{
« no previous file with comments | « no previous file | core/src/fpdfapi/fpdf_render/render_int.h » ('j') | core/src/fpdfapi/fpdf_render/render_int.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698