summaryrefslogtreecommitdiff
path: root/core/fxcodec/jbig2/JBig2_GsidProc.cpp
diff options
context:
space:
mode:
authorweili <weili@chromium.org>2016-05-26 18:13:58 -0700
committerCommit bot <commit-bot@chromium.org>2016-05-26 18:13:58 -0700
commit7aed76f53137a71491040c776ab2f8931e91061b (patch)
tree1ab0166c6161bcfbce931730c776fff0df0bbfba /core/fxcodec/jbig2/JBig2_GsidProc.cpp
parent54ab2343c338f55735c37ed6751040791e1df1e2 (diff)
downloadpdfium-7aed76f53137a71491040c776ab2f8931e91061b.tar.xz
Fix a bug which may cause infinite loop
When the condition is "status == FXCODEC_STATUS_DECODE_TOBECONTINUE" while |status| never gets updated in the loop, it would enter infinite loop. Also, since Start_decode_MMR() never returns FXCODEC_STATUS_DECODE_TOBECONTINUE, there is no point to check on the return value for that. Review-Url: https://codereview.chromium.org/2013263002
Diffstat (limited to 'core/fxcodec/jbig2/JBig2_GsidProc.cpp')
-rw-r--r--core/fxcodec/jbig2/JBig2_GsidProc.cpp14
1 files changed, 3 insertions, 11 deletions
diff --git a/core/fxcodec/jbig2/JBig2_GsidProc.cpp b/core/fxcodec/jbig2/JBig2_GsidProc.cpp
index 30f95b8200..ee6cd368d5 100644
--- a/core/fxcodec/jbig2/JBig2_GsidProc.cpp
+++ b/core/fxcodec/jbig2/JBig2_GsidProc.cpp
@@ -46,7 +46,7 @@ uint32_t* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
FXCODEC_STATUS status =
pGRD->Start_decode_Arith(&pImage, pArithDecoder, gbContext, nullptr);
while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE)
- pGRD->Continue_decode(pPause);
+ status = pGRD->Continue_decode(pPause);
if (!pImage)
return nullptr;
@@ -78,11 +78,7 @@ uint32_t* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream,
std::unique_ptr<CJBig2_Image*> GSPLANES(FX_Alloc(CJBig2_Image*, GSBPP));
JBIG2_memset(GSPLANES.get(), 0, sizeof(CJBig2_Image*) * GSBPP);
- FXCODEC_STATUS status =
- pGRD->Start_decode_MMR(&GSPLANES.get()[GSBPP - 1], pStream, nullptr);
- while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
- }
+ pGRD->Start_decode_MMR(&GSPLANES.get()[GSBPP - 1], pStream, nullptr);
if (!GSPLANES.get()[GSBPP - 1])
return nullptr;
@@ -90,11 +86,7 @@ uint32_t* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream,
pStream->offset(3);
int32_t J = GSBPP - 2;
while (J >= 0) {
- FXCODEC_STATUS status =
- pGRD->Start_decode_MMR(&GSPLANES.get()[J], pStream, nullptr);
- while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
- }
+ pGRD->Start_decode_MMR(&GSPLANES.get()[J], pStream, nullptr);
if (!GSPLANES.get()[J]) {
for (int32_t K = GSBPP - 1; K > J; --K)
delete GSPLANES.get()[K];