Index: core/src/fxcodec/jbig2/JBig2_Context.cpp |
diff --git a/core/src/fxcodec/jbig2/JBig2_Context.cpp b/core/src/fxcodec/jbig2/JBig2_Context.cpp |
index 232bbf26af419d8d9db55a0a55433d697c8043b8..9cf39cb1b4a63ab7e39907cb1a45fe97ce111cec 100644 |
--- a/core/src/fxcodec/jbig2/JBig2_Context.cpp |
+++ b/core/src/fxcodec/jbig2/JBig2_Context.cpp |
@@ -75,44 +75,41 @@ CJBig2_Context::~CJBig2_Context() { |
delete m_pStream; |
m_pStream = NULL; |
} |
+ |
int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause) { |
- uint8_t cFlags; |
- FX_DWORD dwTemp; |
+ if (m_pStream->getByteLeft() < 8) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
const uint8_t fileID[] = {0x97, 0x4A, 0x42, 0x32, 0x0D, 0x0A, 0x1A, 0x0A}; |
- int32_t nRet; |
- if (m_pStream->getByteLeft() < 8) { |
- nRet = JBIG2_ERROR_TOO_SHORT; |
- goto failed; |
- } |
- if (JBIG2_memcmp(m_pStream->getPointer(), fileID, 8) != 0) { |
- nRet = JBIG2_ERROR_FILE_FORMAT; |
- goto failed; |
- } |
+ if (JBIG2_memcmp(m_pStream->getPointer(), fileID, 8) != 0) |
+ return JBIG2_ERROR_FILE_FORMAT; |
+ |
m_pStream->offset(8); |
- if (m_pStream->read1Byte(&cFlags) != 0) { |
- nRet = JBIG2_ERROR_TOO_SHORT; |
- goto failed; |
- } |
+ |
+ uint8_t cFlags; |
+ if (m_pStream->read1Byte(&cFlags) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
if (!(cFlags & 0x02)) { |
- if (m_pStream->readInteger(&dwTemp) != 0) { |
- nRet = JBIG2_ERROR_TOO_SHORT; |
- goto failed; |
- } |
+ FX_DWORD dwTemp; |
+ if (m_pStream->readInteger(&dwTemp) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
if (dwTemp > 0) { |
m_PageInfoList.clear(); |
m_PageInfoList.resize(dwTemp); |
} |
} |
+ |
if (cFlags & 0x01) { |
m_nStreamType = JBIG2_SQUENTIAL_STREAM; |
return decode_SquentialOrgnazation(pPause); |
- } else { |
- m_nStreamType = JBIG2_RANDOM_STREAM; |
- return decode_RandomOrgnazation_FirstPage(pPause); |
} |
-failed: |
- return nRet; |
+ |
+ m_nStreamType = JBIG2_RANDOM_STREAM; |
+ return decode_RandomOrgnazation_FirstPage(pPause); |
} |
+ |
int32_t CJBig2_Context::decode_SquentialOrgnazation(IFX_Pause* pPause) { |
int32_t nRet; |
if (m_pStream->getByteLeft() <= 0) |
@@ -324,19 +321,17 @@ CJBig2_Segment* CJBig2_Context::findReferredSegmentByTypeAndIndex( |
return NULL; |
} |
int32_t CJBig2_Context::parseSegmentHeader(CJBig2_Segment* pSegment) { |
- uint8_t cSSize, cPSize; |
- uint8_t cTemp; |
- FX_WORD wTemp; |
- FX_DWORD dwTemp; |
if ((m_pStream->readInteger(&pSegment->m_dwNumber) != 0) || |
(m_pStream->read1Byte(&pSegment->m_cFlags.c) != 0)) { |
- goto failed; |
+ return JBIG2_ERROR_TOO_SHORT; |
} |
- cTemp = m_pStream->getCurByte(); |
+ |
+ FX_DWORD dwTemp; |
+ uint8_t cTemp = m_pStream->getCurByte(); |
if ((cTemp >> 5) == 7) { |
if (m_pStream->readInteger( |
(FX_DWORD*)&pSegment->m_nReferred_to_segment_count) != 0) { |
- goto failed; |
+ return JBIG2_ERROR_TOO_SHORT; |
} |
pSegment->m_nReferred_to_segment_count &= 0x1fffffff; |
if (pSegment->m_nReferred_to_segment_count > |
@@ -345,62 +340,59 @@ int32_t CJBig2_Context::parseSegmentHeader(CJBig2_Segment* pSegment) { |
} |
dwTemp = 5 + 4 + (pSegment->m_nReferred_to_segment_count + 1) / 8; |
} else { |
- if (m_pStream->read1Byte(&cTemp) != 0) { |
- goto failed; |
- } |
+ if (m_pStream->read1Byte(&cTemp) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
pSegment->m_nReferred_to_segment_count = cTemp >> 5; |
dwTemp = 5 + 1; |
} |
- cSSize = |
+ uint8_t cSSize = |
pSegment->m_dwNumber > 65536 ? 4 : pSegment->m_dwNumber > 256 ? 2 : 1; |
- cPSize = pSegment->m_cFlags.s.page_association_size ? 4 : 1; |
+ uint8_t cPSize = pSegment->m_cFlags.s.page_association_size ? 4 : 1; |
if (pSegment->m_nReferred_to_segment_count) { |
pSegment->m_pReferred_to_segment_numbers = |
FX_Alloc(FX_DWORD, pSegment->m_nReferred_to_segment_count); |
for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
switch (cSSize) { |
case 1: |
- if (m_pStream->read1Byte(&cTemp) != 0) { |
- goto failed; |
- } |
+ if (m_pStream->read1Byte(&cTemp) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
pSegment->m_pReferred_to_segment_numbers[i] = cTemp; |
break; |
case 2: |
- if (m_pStream->readShortInteger(&wTemp) != 0) { |
- goto failed; |
- } |
+ FX_WORD wTemp; |
+ if (m_pStream->readShortInteger(&wTemp) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
pSegment->m_pReferred_to_segment_numbers[i] = wTemp; |
break; |
case 4: |
- if (m_pStream->readInteger(&dwTemp) != 0) { |
- goto failed; |
- } |
+ if (m_pStream->readInteger(&dwTemp) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
pSegment->m_pReferred_to_segment_numbers[i] = dwTemp; |
break; |
} |
- if (pSegment->m_pReferred_to_segment_numbers[i] >= pSegment->m_dwNumber) { |
- goto failed; |
- } |
+ if (pSegment->m_pReferred_to_segment_numbers[i] >= pSegment->m_dwNumber) |
+ return JBIG2_ERROR_TOO_SHORT; |
} |
} |
if (cPSize == 1) { |
- if (m_pStream->read1Byte(&cTemp) != 0) { |
- goto failed; |
- } |
+ if (m_pStream->read1Byte(&cTemp) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
pSegment->m_dwPage_association = cTemp; |
} else { |
if (m_pStream->readInteger(&pSegment->m_dwPage_association) != 0) { |
- goto failed; |
+ return JBIG2_ERROR_TOO_SHORT; |
} |
} |
- if (m_pStream->readInteger(&pSegment->m_dwData_length) != 0) { |
- goto failed; |
- } |
+ if (m_pStream->readInteger(&pSegment->m_dwData_length) != 0) |
+ return JBIG2_ERROR_TOO_SHORT; |
+ |
pSegment->m_pData = m_pStream->getPointer(); |
pSegment->m_State = JBIG2_SEGMENT_DATA_UNPARSED; |
return JBIG2_SUCCESS; |
-failed: |
- return JBIG2_ERROR_TOO_SHORT; |
} |
int32_t CJBig2_Context::parseSegmentData(CJBig2_Segment* pSegment, |