Index: core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
index ff670965eca46b97fab402afd04d23fbd598de65..5e8c1b5ec3b2aa33cb1634f72994599e3be9ab4c 100644 |
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp |
@@ -140,7 +140,8 @@ int CPDF_StreamContentParser::GetNextParamPos() |
m_ParamStartPos = 0; |
} |
if (m_ParamBuf1[m_ParamStartPos].m_Type == 0) { |
- m_ParamBuf1[m_ParamStartPos].m_pObject->Release(); |
+ if (CPDF_Object* pObject = m_ParamBuf1[m_ParamStartPos].m_pObject) |
+ pObject->Release(); |
} |
return m_ParamStartPos; |
} |
@@ -187,7 +188,8 @@ void CPDF_StreamContentParser::ClearAllParams() |
FX_DWORD index = m_ParamStartPos; |
for (FX_DWORD i = 0; i < m_ParamCount; i ++) { |
if (m_ParamBuf1[index].m_Type == 0) { |
- m_ParamBuf1[index].m_pObject->Release(); |
+ if (CPDF_Object* pObject = m_ParamBuf1[index].m_pObject) |
+ pObject->Release(); |
} |
index ++; |
if (index == PARAM_BUF_SIZE) { |
@@ -238,7 +240,7 @@ CFX_ByteString CPDF_StreamContentParser::GetString(FX_DWORD index) |
if (param.m_Type == PDFOBJ_NAME) { |
return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len); |
} |
- if (param.m_Type == 0) { |
+ if (param.m_Type == 0 && param.m_pObject) { |
return param.m_pObject->GetString(); |
} |
return CFX_ByteString(); |
@@ -256,7 +258,7 @@ FX_FLOAT CPDF_StreamContentParser::GetNumber(FX_DWORD index) |
if (param.m_Type == PDFOBJ_NUMBER) { |
return param.m_Number.m_bInteger ? (FX_FLOAT)param.m_Number.m_Integer : param.m_Number.m_Float; |
} |
- if (param.m_Type == 0) { |
+ if (param.m_Type == 0 && param.m_pObject) { |
return param.m_pObject->GetNumber(); |
} |
return 0; |
@@ -653,7 +655,7 @@ void CPDF_StreamContentParser::Handle_SetDash() |
if (m_Options.m_bTextOnly) { |
return; |
} |
- CPDF_Array* pArray = GetObject(1)->GetArray(); |
+ CPDF_Array* pArray = GetObject(1) ? GetObject(1)->GetArray() : NULL; |
if (pArray == NULL) { |
return; |
} |
@@ -728,7 +730,7 @@ void CPDF_StreamContentParser::Handle_ExecuteXObject() |
m_bResourceMissing = TRUE; |
return; |
} |
- CFX_ByteStringC type = pXObject->GetDict()->GetConstString(FX_BSTRC("Subtype")); |
+ CFX_ByteStringC type = pXObject->GetDict() ? pXObject->GetDict()->GetConstString(FX_BSTRC("Subtype")) : CFX_ByteStringC(); |
if (type == FX_BSTRC("Image")) { |
if (m_Options.m_bTextOnly) { |
return; |
@@ -1425,7 +1427,7 @@ void CPDF_StreamContentParser::Handle_ShowText() |
} |
void CPDF_StreamContentParser::Handle_ShowText_Positioning() |
{ |
- CPDF_Array* pArray = GetObject(0)->GetArray(); |
+ CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; |
if (pArray == NULL) { |
return; |
} |
@@ -1457,10 +1459,11 @@ void CPDF_StreamContentParser::Handle_ShowText_Positioning() |
pStrs[iSegment] = str; |
pKerning[iSegment ++] = 0; |
} else { |
+ FX_FLOAT num = pObj ? pObj->GetNumber() : 0; |
if (iSegment == 0) { |
- fInitKerning += pObj->GetNumber(); |
+ fInitKerning += num; |
} else { |
- pKerning[iSegment - 1] += pObj->GetNumber(); |
+ pKerning[iSegment - 1] += num; |
} |
} |
} |