| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/include/fpdfapi/fpdf_parser.h" | 7 #include "core/include/fpdfapi/fpdf_parser.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 bool bIsNumber; | 527 bool bIsNumber; |
| 528 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); | 528 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); |
| 529 if (word.IsEmpty()) | 529 if (word.IsEmpty()) |
| 530 return false; | 530 return false; |
| 531 | 531 |
| 532 if (!bIsNumber) { | 532 if (!bIsNumber) { |
| 533 m_Syntax.RestorePos(SavedPos); | 533 m_Syntax.RestorePos(SavedPos); |
| 534 break; | 534 break; |
| 535 } | 535 } |
| 536 | 536 |
| 537 FX_DWORD start_objnum = FXSYS_atoi(word); | 537 FX_DWORD start_objnum = FXSYS_atoui(word); |
| 538 if (start_objnum >= kMaxObjectNumber) | 538 if (start_objnum >= kMaxObjectNumber) |
| 539 return false; | 539 return false; |
| 540 | 540 |
| 541 FX_DWORD count = m_Syntax.GetDirectNum(); | 541 FX_DWORD count = m_Syntax.GetDirectNum(); |
| 542 m_Syntax.ToNextWord(); | 542 m_Syntax.ToNextWord(); |
| 543 SavedPos = m_Syntax.SavePos(); | 543 SavedPos = m_Syntax.SavePos(); |
| 544 const int32_t recordsize = 20; | 544 const int32_t recordsize = 20; |
| 545 | 545 |
| 546 m_dwXrefStartObjNum = start_objnum; | 546 m_dwXrefStartObjNum = start_objnum; |
| 547 if (!bSkip) { | 547 if (!bSkip) { |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 case 2: | 751 case 2: |
| 752 if (byte != 'j') { | 752 if (byte != 'j') { |
| 753 --i; | 753 --i; |
| 754 state = ParserState::kDefault; | 754 state = ParserState::kDefault; |
| 755 } else { | 755 } else { |
| 756 inside_index++; | 756 inside_index++; |
| 757 } | 757 } |
| 758 break; | 758 break; |
| 759 case 3: | 759 case 3: |
| 760 if (PDFCharIsWhitespace(byte) || PDFCharIsDelimiter(byte)) { | 760 if (PDFCharIsWhitespace(byte) || PDFCharIsDelimiter(byte)) { |
| 761 if (objnum > 0x1000000) { | |
| 762 state = ParserState::kDefault; | |
| 763 break; | |
| 764 } | |
| 765 FX_FILESIZE obj_pos = start_pos - m_Syntax.m_HeaderOffset; | 761 FX_FILESIZE obj_pos = start_pos - m_Syntax.m_HeaderOffset; |
| 766 m_SortedOffset.insert(obj_pos); | 762 m_SortedOffset.insert(obj_pos); |
| 767 last_obj = start_pos; | 763 last_obj = start_pos; |
| 768 FX_FILESIZE obj_end = 0; | 764 FX_FILESIZE obj_end = 0; |
| 769 CPDF_Object* pObject = ParseIndirectObjectAtByStrict( | 765 CPDF_Object* pObject = ParseIndirectObjectAtByStrict( |
| 770 m_pDocument, obj_pos, objnum, &obj_end); | 766 m_pDocument, obj_pos, objnum, &obj_end); |
| 771 if (CPDF_Stream* pStream = ToStream(pObject)) { | 767 if (CPDF_Stream* pStream = ToStream(pObject)) { |
| 772 if (CPDF_Dictionary* pDict = pStream->GetDict()) { | 768 if (CPDF_Dictionary* pDict = pStream->GetDict()) { |
| 773 if ((pDict->KeyExist("Type")) && | 769 if ((pDict->KeyExist("Type")) && |
| 774 (pDict->GetStringBy("Type") == "XRef" && | 770 (pDict->GetStringBy("Type") == "XRef" && |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1316 FX_FILESIZE SavedPos = m_Syntax.SavePos(); | 1312 FX_FILESIZE SavedPos = m_Syntax.SavePos(); |
| 1317 m_Syntax.RestorePos(pos); | 1313 m_Syntax.RestorePos(pos); |
| 1318 | 1314 |
| 1319 bool bIsNumber; | 1315 bool bIsNumber; |
| 1320 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); | 1316 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); |
| 1321 if (!bIsNumber) { | 1317 if (!bIsNumber) { |
| 1322 m_Syntax.RestorePos(SavedPos); | 1318 m_Syntax.RestorePos(SavedPos); |
| 1323 return; | 1319 return; |
| 1324 } | 1320 } |
| 1325 | 1321 |
| 1326 FX_DWORD parser_objnum = FXSYS_atoi(word); | 1322 FX_DWORD parser_objnum = FXSYS_atoui(word); |
| 1327 if (parser_objnum && parser_objnum != objnum) { | 1323 if (parser_objnum && parser_objnum != objnum) { |
| 1328 m_Syntax.RestorePos(SavedPos); | 1324 m_Syntax.RestorePos(SavedPos); |
| 1329 return; | 1325 return; |
| 1330 } | 1326 } |
| 1331 | 1327 |
| 1332 word = m_Syntax.GetNextWord(&bIsNumber); | 1328 word = m_Syntax.GetNextWord(&bIsNumber); |
| 1333 if (!bIsNumber) { | 1329 if (!bIsNumber) { |
| 1334 m_Syntax.RestorePos(SavedPos); | 1330 m_Syntax.RestorePos(SavedPos); |
| 1335 return; | 1331 return; |
| 1336 } | 1332 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1388 m_Syntax.RestorePos(pos); | 1384 m_Syntax.RestorePos(pos); |
| 1389 bool bIsNumber; | 1385 bool bIsNumber; |
| 1390 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); | 1386 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); |
| 1391 if (!bIsNumber) { | 1387 if (!bIsNumber) { |
| 1392 m_Syntax.RestorePos(SavedPos); | 1388 m_Syntax.RestorePos(SavedPos); |
| 1393 return nullptr; | 1389 return nullptr; |
| 1394 } | 1390 } |
| 1395 | 1391 |
| 1396 FX_FILESIZE objOffset = m_Syntax.SavePos(); | 1392 FX_FILESIZE objOffset = m_Syntax.SavePos(); |
| 1397 objOffset -= word.GetLength(); | 1393 objOffset -= word.GetLength(); |
| 1398 FX_DWORD parser_objnum = FXSYS_atoi(word); | 1394 FX_DWORD parser_objnum = FXSYS_atoui(word); |
| 1399 if (objnum && parser_objnum != objnum) { | 1395 if (objnum && parser_objnum != objnum) { |
| 1400 m_Syntax.RestorePos(SavedPos); | 1396 m_Syntax.RestorePos(SavedPos); |
| 1401 return nullptr; | 1397 return nullptr; |
| 1402 } | 1398 } |
| 1403 | 1399 |
| 1404 word = m_Syntax.GetNextWord(&bIsNumber); | 1400 word = m_Syntax.GetNextWord(&bIsNumber); |
| 1405 if (!bIsNumber) { | 1401 if (!bIsNumber) { |
| 1406 m_Syntax.RestorePos(SavedPos); | 1402 m_Syntax.RestorePos(SavedPos); |
| 1407 return nullptr; | 1403 return nullptr; |
| 1408 } | 1404 } |
| 1409 | 1405 |
| 1410 FX_DWORD parser_gennum = FXSYS_atoi(word); | 1406 FX_DWORD parser_gennum = FXSYS_atoui(word); |
| 1411 if (m_Syntax.GetKeyword() != "obj") { | 1407 if (m_Syntax.GetKeyword() != "obj") { |
| 1412 m_Syntax.RestorePos(SavedPos); | 1408 m_Syntax.RestorePos(SavedPos); |
| 1413 return nullptr; | 1409 return nullptr; |
| 1414 } | 1410 } |
| 1415 | 1411 |
| 1416 CPDF_Object* pObj = m_Syntax.GetObject(pObjList, objnum, parser_gennum, true); | 1412 CPDF_Object* pObj = m_Syntax.GetObject(pObjList, objnum, parser_gennum, true); |
| 1417 m_Syntax.SavePos(); | 1413 m_Syntax.SavePos(); |
| 1418 | 1414 |
| 1419 CFX_ByteString bsWord = m_Syntax.GetKeyword(); | 1415 CFX_ByteString bsWord = m_Syntax.GetKeyword(); |
| 1420 if (bsWord == "endobj") | 1416 if (bsWord == "endobj") |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1437 FX_FILESIZE SavedPos = m_Syntax.SavePos(); | 1433 FX_FILESIZE SavedPos = m_Syntax.SavePos(); |
| 1438 m_Syntax.RestorePos(pos); | 1434 m_Syntax.RestorePos(pos); |
| 1439 | 1435 |
| 1440 bool bIsNumber; | 1436 bool bIsNumber; |
| 1441 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); | 1437 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); |
| 1442 if (!bIsNumber) { | 1438 if (!bIsNumber) { |
| 1443 m_Syntax.RestorePos(SavedPos); | 1439 m_Syntax.RestorePos(SavedPos); |
| 1444 return nullptr; | 1440 return nullptr; |
| 1445 } | 1441 } |
| 1446 | 1442 |
| 1447 FX_DWORD parser_objnum = FXSYS_atoi(word); | 1443 FX_DWORD parser_objnum = FXSYS_atoui(word); |
| 1448 if (objnum && parser_objnum != objnum) { | 1444 if (objnum && parser_objnum != objnum) { |
| 1449 m_Syntax.RestorePos(SavedPos); | 1445 m_Syntax.RestorePos(SavedPos); |
| 1450 return nullptr; | 1446 return nullptr; |
| 1451 } | 1447 } |
| 1452 | 1448 |
| 1453 word = m_Syntax.GetNextWord(&bIsNumber); | 1449 word = m_Syntax.GetNextWord(&bIsNumber); |
| 1454 if (!bIsNumber) { | 1450 if (!bIsNumber) { |
| 1455 m_Syntax.RestorePos(SavedPos); | 1451 m_Syntax.RestorePos(SavedPos); |
| 1456 return nullptr; | 1452 return nullptr; |
| 1457 } | 1453 } |
| 1458 | 1454 |
| 1459 FX_DWORD gennum = FXSYS_atoi(word); | 1455 FX_DWORD gennum = FXSYS_atoui(word); |
| 1460 if (m_Syntax.GetKeyword() != "obj") { | 1456 if (m_Syntax.GetKeyword() != "obj") { |
| 1461 m_Syntax.RestorePos(SavedPos); | 1457 m_Syntax.RestorePos(SavedPos); |
| 1462 return nullptr; | 1458 return nullptr; |
| 1463 } | 1459 } |
| 1464 | 1460 |
| 1465 CPDF_Object* pObj = m_Syntax.GetObjectByStrict(pObjList, objnum, gennum); | 1461 CPDF_Object* pObj = m_Syntax.GetObjectByStrict(pObjList, objnum, gennum); |
| 1466 if (pResultPos) | 1462 if (pResultPos) |
| 1467 *pResultPos = m_Syntax.m_Pos; | 1463 *pResultPos = m_Syntax.m_Pos; |
| 1468 | 1464 |
| 1469 m_Syntax.RestorePos(SavedPos); | 1465 m_Syntax.RestorePos(SavedPos); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1499 FX_DWORD offset) { | 1495 FX_DWORD offset) { |
| 1500 m_Syntax.InitParser(pFileAccess, offset); | 1496 m_Syntax.InitParser(pFileAccess, offset); |
| 1501 m_Syntax.RestorePos(m_Syntax.m_HeaderOffset + 9); | 1497 m_Syntax.RestorePos(m_Syntax.m_HeaderOffset + 9); |
| 1502 | 1498 |
| 1503 FX_FILESIZE SavedPos = m_Syntax.SavePos(); | 1499 FX_FILESIZE SavedPos = m_Syntax.SavePos(); |
| 1504 bool bIsNumber; | 1500 bool bIsNumber; |
| 1505 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); | 1501 CFX_ByteString word = m_Syntax.GetNextWord(&bIsNumber); |
| 1506 if (!bIsNumber) | 1502 if (!bIsNumber) |
| 1507 return FALSE; | 1503 return FALSE; |
| 1508 | 1504 |
| 1509 FX_DWORD objnum = FXSYS_atoi(word); | 1505 FX_DWORD objnum = FXSYS_atoui(word); |
| 1510 word = m_Syntax.GetNextWord(&bIsNumber); | 1506 word = m_Syntax.GetNextWord(&bIsNumber); |
| 1511 if (!bIsNumber) | 1507 if (!bIsNumber) |
| 1512 return FALSE; | 1508 return FALSE; |
| 1513 | 1509 |
| 1514 FX_DWORD gennum = FXSYS_atoi(word); | 1510 FX_DWORD gennum = FXSYS_atoui(word); |
| 1515 if (m_Syntax.GetKeyword() != "obj") { | 1511 if (m_Syntax.GetKeyword() != "obj") { |
| 1516 m_Syntax.RestorePos(SavedPos); | 1512 m_Syntax.RestorePos(SavedPos); |
| 1517 return FALSE; | 1513 return FALSE; |
| 1518 } | 1514 } |
| 1519 | 1515 |
| 1520 m_pLinearized = m_Syntax.GetObject(nullptr, objnum, gennum, true); | 1516 m_pLinearized = m_Syntax.GetObject(nullptr, objnum, gennum, true); |
| 1521 if (!m_pLinearized) | 1517 if (!m_pLinearized) |
| 1522 return FALSE; | 1518 return FALSE; |
| 1523 | 1519 |
| 1524 CPDF_Dictionary* pDict = m_pLinearized->GetDict(); | 1520 CPDF_Dictionary* pDict = m_pLinearized->GetDict(); |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2032 CFX_ByteString word = GetNextWord(&bIsNumber); | 2028 CFX_ByteString word = GetNextWord(&bIsNumber); |
| 2033 if (word.GetLength() == 0) | 2029 if (word.GetLength() == 0) |
| 2034 return nullptr; | 2030 return nullptr; |
| 2035 | 2031 |
| 2036 if (bIsNumber) { | 2032 if (bIsNumber) { |
| 2037 FX_FILESIZE SavedPos = m_Pos; | 2033 FX_FILESIZE SavedPos = m_Pos; |
| 2038 CFX_ByteString nextword = GetNextWord(&bIsNumber); | 2034 CFX_ByteString nextword = GetNextWord(&bIsNumber); |
| 2039 if (bIsNumber) { | 2035 if (bIsNumber) { |
| 2040 CFX_ByteString nextword2 = GetNextWord(nullptr); | 2036 CFX_ByteString nextword2 = GetNextWord(nullptr); |
| 2041 if (nextword2 == "R") { | 2037 if (nextword2 == "R") { |
| 2042 FX_DWORD objnum = FXSYS_atoi(word); | 2038 FX_DWORD objnum = FXSYS_atoui(word); |
| 2043 return new CPDF_Reference(pObjList, objnum); | 2039 return new CPDF_Reference(pObjList, objnum); |
| 2044 } | 2040 } |
| 2045 } | 2041 } |
| 2046 m_Pos = SavedPos; | 2042 m_Pos = SavedPos; |
| 2047 return new CPDF_Number(word); | 2043 return new CPDF_Number(word); |
| 2048 } | 2044 } |
| 2049 | 2045 |
| 2050 if (word == "true" || word == "false") | 2046 if (word == "true" || word == "false") |
| 2051 return new CPDF_Boolean(word == "true"); | 2047 return new CPDF_Boolean(word == "true"); |
| 2052 | 2048 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2156 CFX_ByteString word = GetNextWord(&bIsNumber); | 2152 CFX_ByteString word = GetNextWord(&bIsNumber); |
| 2157 if (word.GetLength() == 0) | 2153 if (word.GetLength() == 0) |
| 2158 return nullptr; | 2154 return nullptr; |
| 2159 | 2155 |
| 2160 if (bIsNumber) { | 2156 if (bIsNumber) { |
| 2161 FX_FILESIZE SavedPos = m_Pos; | 2157 FX_FILESIZE SavedPos = m_Pos; |
| 2162 CFX_ByteString nextword = GetNextWord(&bIsNumber); | 2158 CFX_ByteString nextword = GetNextWord(&bIsNumber); |
| 2163 if (bIsNumber) { | 2159 if (bIsNumber) { |
| 2164 CFX_ByteString nextword2 = GetNextWord(nullptr); | 2160 CFX_ByteString nextword2 = GetNextWord(nullptr); |
| 2165 if (nextword2 == "R") | 2161 if (nextword2 == "R") |
| 2166 return new CPDF_Reference(pObjList, FXSYS_atoi(word)); | 2162 return new CPDF_Reference(pObjList, FXSYS_atoui(word)); |
| 2167 } | 2163 } |
| 2168 m_Pos = SavedPos; | 2164 m_Pos = SavedPos; |
| 2169 return new CPDF_Number(word); | 2165 return new CPDF_Number(word); |
| 2170 } | 2166 } |
| 2171 | 2167 |
| 2172 if (word == "true" || word == "false") | 2168 if (word == "true" || word == "false") |
| 2173 return new CPDF_Boolean(word == "true"); | 2169 return new CPDF_Boolean(word == "true"); |
| 2174 | 2170 |
| 2175 if (word == "null") | 2171 if (word == "null") |
| 2176 return new CPDF_Null; | 2172 return new CPDF_Null; |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2433 m_HeaderOffset = HeaderOffset; | 2429 m_HeaderOffset = HeaderOffset; |
| 2434 m_FileLen = pFileAccess->GetSize(); | 2430 m_FileLen = pFileAccess->GetSize(); |
| 2435 m_Pos = 0; | 2431 m_Pos = 0; |
| 2436 m_pFileAccess = pFileAccess; | 2432 m_pFileAccess = pFileAccess; |
| 2437 m_BufOffset = 0; | 2433 m_BufOffset = 0; |
| 2438 pFileAccess->ReadBlock( | 2434 pFileAccess->ReadBlock( |
| 2439 m_pFileBuf, 0, | 2435 m_pFileBuf, 0, |
| 2440 (size_t)((FX_FILESIZE)m_BufSize > m_FileLen ? m_FileLen : m_BufSize)); | 2436 (size_t)((FX_FILESIZE)m_BufSize > m_FileLen ? m_FileLen : m_BufSize)); |
| 2441 } | 2437 } |
| 2442 | 2438 |
| 2443 int32_t CPDF_SyntaxParser::GetDirectNum() { | 2439 uint32_t CPDF_SyntaxParser::GetDirectNum() { |
| 2444 bool bIsNumber; | 2440 bool bIsNumber; |
| 2445 GetNextWordInternal(&bIsNumber); | 2441 GetNextWordInternal(&bIsNumber); |
| 2446 if (!bIsNumber) | 2442 if (!bIsNumber) |
| 2447 return 0; | 2443 return 0; |
| 2448 | 2444 |
| 2449 m_WordBuffer[m_WordSize] = 0; | 2445 m_WordBuffer[m_WordSize] = 0; |
| 2450 return FXSYS_atoi(reinterpret_cast<const FX_CHAR*>(m_WordBuffer)); | 2446 return FXSYS_atoui(reinterpret_cast<const FX_CHAR*>(m_WordBuffer)); |
| 2451 } | 2447 } |
| 2452 | 2448 |
| 2453 bool CPDF_SyntaxParser::IsWholeWord(FX_FILESIZE startpos, | 2449 bool CPDF_SyntaxParser::IsWholeWord(FX_FILESIZE startpos, |
| 2454 FX_FILESIZE limit, | 2450 FX_FILESIZE limit, |
| 2455 const CFX_ByteStringC& tag, | 2451 const CFX_ByteStringC& tag, |
| 2456 FX_BOOL checkKeyword) { | 2452 FX_BOOL checkKeyword) { |
| 2457 const FX_DWORD taglen = tag.GetLength(); | 2453 const FX_DWORD taglen = tag.GetLength(); |
| 2458 | 2454 |
| 2459 bool bCheckLeft = !PDFCharIsDelimiter(tag[0]) && !PDFCharIsWhitespace(tag[0]); | 2455 bool bCheckLeft = !PDFCharIsDelimiter(tag[0]) && !PDFCharIsWhitespace(tag[0]); |
| 2460 bool bCheckRight = !PDFCharIsDelimiter(tag[taglen - 1]) && | 2456 bool bCheckRight = !PDFCharIsDelimiter(tag[taglen - 1]) && |
| (...skipping 1086 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3547 FX_DWORD objnum, | 3543 FX_DWORD objnum, |
| 3548 CPDF_IndirectObjectHolder* pObjList) { | 3544 CPDF_IndirectObjectHolder* pObjList) { |
| 3549 FX_FILESIZE SavedPos = m_syntaxParser.SavePos(); | 3545 FX_FILESIZE SavedPos = m_syntaxParser.SavePos(); |
| 3550 m_syntaxParser.RestorePos(pos); | 3546 m_syntaxParser.RestorePos(pos); |
| 3551 | 3547 |
| 3552 bool bIsNumber; | 3548 bool bIsNumber; |
| 3553 CFX_ByteString word = m_syntaxParser.GetNextWord(&bIsNumber); | 3549 CFX_ByteString word = m_syntaxParser.GetNextWord(&bIsNumber); |
| 3554 if (!bIsNumber) | 3550 if (!bIsNumber) |
| 3555 return nullptr; | 3551 return nullptr; |
| 3556 | 3552 |
| 3557 FX_DWORD parser_objnum = FXSYS_atoi(word); | 3553 FX_DWORD parser_objnum = FXSYS_atoui(word); |
| 3558 if (objnum && parser_objnum != objnum) | 3554 if (objnum && parser_objnum != objnum) |
| 3559 return nullptr; | 3555 return nullptr; |
| 3560 | 3556 |
| 3561 word = m_syntaxParser.GetNextWord(&bIsNumber); | 3557 word = m_syntaxParser.GetNextWord(&bIsNumber); |
| 3562 if (!bIsNumber) | 3558 if (!bIsNumber) |
| 3563 return nullptr; | 3559 return nullptr; |
| 3564 | 3560 |
| 3565 FX_DWORD gennum = FXSYS_atoi(word); | 3561 FX_DWORD gennum = FXSYS_atoui(word); |
| 3566 if (m_syntaxParser.GetKeyword() != "obj") { | 3562 if (m_syntaxParser.GetKeyword() != "obj") { |
| 3567 m_syntaxParser.RestorePos(SavedPos); | 3563 m_syntaxParser.RestorePos(SavedPos); |
| 3568 return nullptr; | 3564 return nullptr; |
| 3569 } | 3565 } |
| 3570 | 3566 |
| 3571 CPDF_Object* pObj = | 3567 CPDF_Object* pObj = |
| 3572 m_syntaxParser.GetObject(pObjList, parser_objnum, gennum, true); | 3568 m_syntaxParser.GetObject(pObjList, parser_objnum, gennum, true); |
| 3573 m_syntaxParser.RestorePos(SavedPos); | 3569 m_syntaxParser.RestorePos(SavedPos); |
| 3574 return pObj; | 3570 return pObj; |
| 3575 } | 3571 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3604 | 3600 |
| 3605 m_dwHeaderOffset = offset; | 3601 m_dwHeaderOffset = offset; |
| 3606 m_syntaxParser.InitParser(file.get(), offset); | 3602 m_syntaxParser.InitParser(file.get(), offset); |
| 3607 m_syntaxParser.RestorePos(m_syntaxParser.m_HeaderOffset + 9); | 3603 m_syntaxParser.RestorePos(m_syntaxParser.m_HeaderOffset + 9); |
| 3608 | 3604 |
| 3609 bool bNumber; | 3605 bool bNumber; |
| 3610 CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(&bNumber); | 3606 CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(&bNumber); |
| 3611 if (!bNumber) | 3607 if (!bNumber) |
| 3612 return FALSE; | 3608 return FALSE; |
| 3613 | 3609 |
| 3614 FX_DWORD objnum = FXSYS_atoi(wordObjNum); | 3610 FX_DWORD objnum = FXSYS_atoui(wordObjNum); |
| 3615 if (m_pLinearized) { | 3611 if (m_pLinearized) { |
| 3616 m_pLinearized->Release(); | 3612 m_pLinearized->Release(); |
| 3617 m_pLinearized = nullptr; | 3613 m_pLinearized = nullptr; |
| 3618 } | 3614 } |
| 3619 | 3615 |
| 3620 m_pLinearized = | 3616 m_pLinearized = |
| 3621 ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum); | 3617 ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum); |
| 3622 if (!m_pLinearized) | 3618 if (!m_pLinearized) |
| 3623 return FALSE; | 3619 return FALSE; |
| 3624 | 3620 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3697 m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize); | 3693 m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize); |
| 3698 | 3694 |
| 3699 ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE)); | 3695 ScopedFileStream file(FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE)); |
| 3700 m_parser.m_Syntax.InitParser(file.get(), 0); | 3696 m_parser.m_Syntax.InitParser(file.get(), 0); |
| 3701 | 3697 |
| 3702 bool bNumber; | 3698 bool bNumber; |
| 3703 CFX_ByteString objnum = m_parser.m_Syntax.GetNextWord(&bNumber); | 3699 CFX_ByteString objnum = m_parser.m_Syntax.GetNextWord(&bNumber); |
| 3704 if (!bNumber) | 3700 if (!bNumber) |
| 3705 return -1; | 3701 return -1; |
| 3706 | 3702 |
| 3707 FX_DWORD objNum = FXSYS_atoi(objnum); | 3703 FX_DWORD objNum = FXSYS_atoui(objnum); |
| 3708 CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(nullptr, 0, objNum); | 3704 CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(nullptr, 0, objNum); |
| 3709 if (!pObj) { | 3705 if (!pObj) { |
| 3710 m_Pos += m_parser.m_Syntax.SavePos(); | 3706 m_Pos += m_parser.m_Syntax.SavePos(); |
| 3711 return 0; | 3707 return 0; |
| 3712 } | 3708 } |
| 3713 | 3709 |
| 3714 CPDF_Dictionary* pDict = pObj->GetDict(); | 3710 CPDF_Dictionary* pDict = pObj->GetDict(); |
| 3715 CPDF_Name* pName = ToName(pDict ? pDict->GetElement("Type") : nullptr); | 3711 CPDF_Name* pName = ToName(pDict ? pDict->GetElement("Type") : nullptr); |
| 3716 if (pName) { | 3712 if (pName) { |
| 3717 if (pName->GetString() == "XRef") { | 3713 if (pName->GetString() == "XRef") { |
| (...skipping 1312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5030 CPDF_Array* pRange = m_pLinearizedDict->GetArrayBy("H"); | 5026 CPDF_Array* pRange = m_pLinearizedDict->GetArrayBy("H"); |
| 5031 if (!pRange) | 5027 if (!pRange) |
| 5032 return -1; | 5028 return -1; |
| 5033 | 5029 |
| 5034 CPDF_Object* pStreamLen = pRange->GetElementValue(1); | 5030 CPDF_Object* pStreamLen = pRange->GetElementValue(1); |
| 5035 if (!pStreamLen) | 5031 if (!pStreamLen) |
| 5036 return -1; | 5032 return -1; |
| 5037 | 5033 |
| 5038 return pStreamLen->GetInteger(); | 5034 return pStreamLen->GetInteger(); |
| 5039 } | 5035 } |
| OLD | NEW |