Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
index e0fd3bfaeecea13e1b023d68982f3d35897ff2b9..a597ea0a081247db3e0b5f48b280d79c31b96760 100644 |
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp |
@@ -51,6 +51,7 @@ CPDF_Parser::CPDF_Parser() |
m_dwFirstPageNo = 0; |
m_dwXrefStartObjNum = 0; |
m_bOwnFileRead = TRUE; |
+ m_FileVersion = 0; |
m_bForceUseSecurityHandler = FALSE; |
} |
CPDF_Parser::~CPDF_Parser() |
@@ -158,10 +159,21 @@ FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess, FX_BOOL bReParse, FX |
} |
m_Syntax.InitParser(pFileAccess, offset); |
FX_BYTE ch; |
- m_Syntax.GetCharAt(5, ch); |
- m_FileVersion = (ch - '0') * 10; |
- m_Syntax.GetCharAt(7, ch); |
- m_FileVersion += ch - '0'; |
+ if (!m_Syntax.GetCharAt(5, ch)) { |
+ return PDFPARSE_ERROR_FORMAT; |
+ } |
+ if (ch >= '0' && ch <= '9') { |
+ m_FileVersion = (ch - '0') * 10; |
+ } |
+ if (!m_Syntax.GetCharAt(7, ch)) { |
+ return PDFPARSE_ERROR_FORMAT; |
+ } |
+ if (ch >= '0' && ch <= '9') { |
+ m_FileVersion += ch - '0'; |
+ } |
+ if (m_Syntax.m_FileLen < m_Syntax.m_HeaderOffset + 9) { |
+ return PDFPARSE_ERROR_FORMAT; |
+ } |
m_Syntax.RestorePos(m_Syntax.m_FileLen - m_Syntax.m_HeaderOffset - 9); |
if (!bReParse) { |
m_pDocument = FX_NEW CPDF_Document(this); |