summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fxcodec/codec/fx_codec_progress.cpp7
-rw-r--r--core/fxcodec/codec/include/ccodec_progressivedecoder.h3
-rw-r--r--testing/libfuzzer/xfa_codec_fuzzer.h3
-rw-r--r--xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp3
-rw-r--r--xfa/fxfa/app/xfa_ffwidget.cpp2
5 files changed, 11 insertions, 7 deletions
diff --git a/core/fxcodec/codec/fx_codec_progress.cpp b/core/fxcodec/codec/fx_codec_progress.cpp
index bdb158f7ca..d63bdb895a 100644
--- a/core/fxcodec/codec/fx_codec_progress.cpp
+++ b/core/fxcodec/codec/fx_codec_progress.cpp
@@ -1286,7 +1286,8 @@ FX_BOOL CCodec_ProgressiveDecoder::DetectImageType(
FXCODEC_STATUS CCodec_ProgressiveDecoder::LoadImageInfo(
IFX_FileRead* pFile,
FXCODEC_IMAGE_TYPE imageType,
- CFX_DIBAttribute* pAttribute) {
+ CFX_DIBAttribute* pAttribute,
+ bool bSkipImageTypeCheck) {
switch (m_status) {
case FXCODEC_STATUS_FRAME_READY:
case FXCODEC_STATUS_FRAME_TOBECONTINUE:
@@ -1309,8 +1310,8 @@ FXCODEC_STATUS CCodec_ProgressiveDecoder::LoadImageInfo(
m_startX = m_startY = 0;
m_sizeX = m_sizeY = 0;
m_SrcPassNumber = 0;
- if (imageType != FXCODEC_IMAGE_UNKNOWN &&
- DetectImageType(imageType, pAttribute)) {
+ if (bSkipImageTypeCheck || (imageType != FXCODEC_IMAGE_UNKNOWN &&
+ DetectImageType(imageType, pAttribute))) {
m_imagType = imageType;
m_status = FXCODEC_STATUS_FRAME_READY;
return m_status;
diff --git a/core/fxcodec/codec/include/ccodec_progressivedecoder.h b/core/fxcodec/codec/include/ccodec_progressivedecoder.h
index 5774371ff1..5df2c4f733 100644
--- a/core/fxcodec/codec/include/ccodec_progressivedecoder.h
+++ b/core/fxcodec/codec/include/ccodec_progressivedecoder.h
@@ -47,7 +47,8 @@ class CCodec_ProgressiveDecoder {
FXCODEC_STATUS LoadImageInfo(IFX_FileRead* pFile,
FXCODEC_IMAGE_TYPE imageType,
- CFX_DIBAttribute* pAttribute);
+ CFX_DIBAttribute* pAttribute,
+ bool bSkipImageTypeCheck);
FXCODEC_IMAGE_TYPE GetType() const { return m_imagType; }
int32_t GetWidth() const { return m_SrcWidth; }
diff --git a/testing/libfuzzer/xfa_codec_fuzzer.h b/testing/libfuzzer/xfa_codec_fuzzer.h
index f3a3517a12..38c4e0ac33 100644
--- a/testing/libfuzzer/xfa_codec_fuzzer.h
+++ b/testing/libfuzzer/xfa_codec_fuzzer.h
@@ -19,7 +19,8 @@ class XFACodecFuzzer {
mgr->CreateProgressiveDecoder());
Reader source(data, size);
- FXCODEC_STATUS status = decoder->LoadImageInfo(&source, type, nullptr);
+ FXCODEC_STATUS status =
+ decoder->LoadImageInfo(&source, type, nullptr, true);
if (status != FXCODEC_STATUS_FRAME_READY)
return 0;
diff --git a/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp b/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp
index 814f300b2d..f822349972 100644
--- a/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp
+++ b/xfa/fxbarcode/BC_BufferedImageLuminanceSource.cpp
@@ -38,7 +38,8 @@ static CFX_DIBitmap* CreateDIBSource(IFX_FileRead* fileread) {
std::unique_ptr<CCodec_ProgressiveDecoder> pImageCodec(
pCodecMgr->CreateProgressiveDecoder());
FXCODEC_STATUS status = FXCODEC_STATUS_DECODE_FINISH;
- status = pImageCodec->LoadImageInfo(fileread, FXCODEC_IMAGE_UNKNOWN, nullptr);
+ status = pImageCodec->LoadImageInfo(fileread, FXCODEC_IMAGE_UNKNOWN, nullptr,
+ false);
if (status != FXCODEC_STATUS_FRAME_READY)
return nullptr;
diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp
index 8925cd35cf..fb9ab5f580 100644
--- a/xfa/fxfa/app/xfa_ffwidget.cpp
+++ b/xfa/fxfa/app/xfa_ffwidget.cpp
@@ -1069,7 +1069,7 @@ CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
CFX_DIBitmap* pBitmap = NULL;
CCodec_ProgressiveDecoder* pProgressiveDecoder =
pCodecMgr->CreateProgressiveDecoder();
- pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr);
+ pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr, false);
switch (dibAttr.m_wDPIUnit) {
case FXCODEC_RESUNIT_CENTIMETER:
dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI * 2.54f);