Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(433)

Side by Side Diff: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp

Issue 1411043003: Convert some pointers in fpdf_parser_parser to unique_ptr and std::vector. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: fix derp Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/include/fpdfapi/fpdf_parser.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 if (pType->GetString() == FX_BSTRC("Sig")) { 89 if (pType->GetString() == FX_BSTRC("Sig")) {
90 return TRUE; 90 return TRUE;
91 } 91 }
92 return FALSE; 92 return FALSE;
93 } 93 }
94 94
95 CPDF_Parser::CPDF_Parser() { 95 CPDF_Parser::CPDF_Parser() {
96 m_pDocument = NULL; 96 m_pDocument = NULL;
97 m_pTrailer = NULL; 97 m_pTrailer = NULL;
98 m_pEncryptDict = NULL; 98 m_pEncryptDict = NULL;
99 m_pSecurityHandler = NULL;
100 m_pLinearized = NULL; 99 m_pLinearized = NULL;
101 m_dwFirstPageNo = 0; 100 m_dwFirstPageNo = 0;
102 m_dwXrefStartObjNum = 0; 101 m_dwXrefStartObjNum = 0;
103 m_bOwnFileRead = TRUE; 102 m_bOwnFileRead = TRUE;
104 m_FileVersion = 0; 103 m_FileVersion = 0;
105 m_bForceUseSecurityHandler = FALSE; 104 m_bForceUseSecurityHandler = FALSE;
106 } 105 }
107 CPDF_Parser::~CPDF_Parser() { 106 CPDF_Parser::~CPDF_Parser() {
108 CloseParser(FALSE); 107 CloseParser(FALSE);
109 } 108 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 } else if (pEncryptObj->GetType() == PDFOBJ_REFERENCE) { 279 } else if (pEncryptObj->GetType() == PDFOBJ_REFERENCE) {
281 pEncryptObj = m_pDocument->GetIndirectObject( 280 pEncryptObj = m_pDocument->GetIndirectObject(
282 ((CPDF_Reference*)pEncryptObj)->GetRefObjNum()); 281 ((CPDF_Reference*)pEncryptObj)->GetRefObjNum());
283 if (pEncryptObj) { 282 if (pEncryptObj) {
284 SetEncryptDictionary(pEncryptObj->GetDict()); 283 SetEncryptDictionary(pEncryptObj->GetDict());
285 } 284 }
286 } 285 }
287 } 286 }
288 if (m_bForceUseSecurityHandler) { 287 if (m_bForceUseSecurityHandler) {
289 FX_DWORD err = PDFPARSE_ERROR_HANDLER; 288 FX_DWORD err = PDFPARSE_ERROR_HANDLER;
290 if (m_pSecurityHandler == NULL) { 289 if (!m_pSecurityHandler) {
291 return PDFPARSE_ERROR_HANDLER; 290 return PDFPARSE_ERROR_HANDLER;
292 } 291 }
293 if (!m_pSecurityHandler->OnInit(this, m_pEncryptDict)) { 292 if (!m_pSecurityHandler->OnInit(this, m_pEncryptDict)) {
294 return err; 293 return err;
295 } 294 }
296 CPDF_CryptoHandler* pCryptoHandler = 295 nonstd::unique_ptr<CPDF_CryptoHandler> pCryptoHandler(
297 m_pSecurityHandler->CreateCryptoHandler(); 296 m_pSecurityHandler->CreateCryptoHandler());
298 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) { 297 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler.get())) {
299 delete pCryptoHandler;
300 pCryptoHandler = NULL;
301 return PDFPARSE_ERROR_HANDLER; 298 return PDFPARSE_ERROR_HANDLER;
302 } 299 }
303 m_Syntax.SetEncrypt(pCryptoHandler); 300 m_Syntax.SetEncrypt(pCryptoHandler.release());
304 } else if (m_pEncryptDict) { 301 } else if (m_pEncryptDict) {
305 CFX_ByteString filter = m_pEncryptDict->GetString(FX_BSTRC("Filter")); 302 CFX_ByteString filter = m_pEncryptDict->GetString(FX_BSTRC("Filter"));
306 CPDF_SecurityHandler* pSecurityHandler = NULL; 303 nonstd::unique_ptr<CPDF_SecurityHandler> pSecurityHandler;
307 FX_DWORD err = PDFPARSE_ERROR_HANDLER; 304 FX_DWORD err = PDFPARSE_ERROR_HANDLER;
308 if (filter == FX_BSTRC("Standard")) { 305 if (filter == FX_BSTRC("Standard")) {
309 pSecurityHandler = FPDF_CreateStandardSecurityHandler(); 306 pSecurityHandler.reset(FPDF_CreateStandardSecurityHandler());
310 err = PDFPARSE_ERROR_PASSWORD; 307 err = PDFPARSE_ERROR_PASSWORD;
311 } 308 }
312 if (pSecurityHandler == NULL) { 309 if (!pSecurityHandler) {
313 return PDFPARSE_ERROR_HANDLER; 310 return PDFPARSE_ERROR_HANDLER;
314 } 311 }
315 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) { 312 if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) {
316 delete pSecurityHandler;
317 pSecurityHandler = NULL;
318 return err; 313 return err;
319 } 314 }
320 m_pSecurityHandler = pSecurityHandler; 315 m_pSecurityHandler = nonstd::move(pSecurityHandler);
321 CPDF_CryptoHandler* pCryptoHandler = 316 nonstd::unique_ptr<CPDF_CryptoHandler> pCryptoHandler(
322 pSecurityHandler->CreateCryptoHandler(); 317 m_pSecurityHandler->CreateCryptoHandler());
323 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) { 318 if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler.get())) {
324 delete pCryptoHandler;
325 pCryptoHandler = NULL;
326 return PDFPARSE_ERROR_HANDLER; 319 return PDFPARSE_ERROR_HANDLER;
327 } 320 }
328 m_Syntax.SetEncrypt(pCryptoHandler); 321 m_Syntax.SetEncrypt(pCryptoHandler.release());
329 } 322 }
330 return PDFPARSE_ERROR_SUCCESS; 323 return PDFPARSE_ERROR_SUCCESS;
331 } 324 }
332 void CPDF_Parser::ReleaseEncryptHandler() { 325 void CPDF_Parser::ReleaseEncryptHandler() {
333 delete m_Syntax.m_pCryptoHandler; 326 m_Syntax.m_pCryptoHandler.reset();
334 m_Syntax.m_pCryptoHandler = NULL;
335 if (!m_bForceUseSecurityHandler) { 327 if (!m_bForceUseSecurityHandler) {
336 delete m_pSecurityHandler; 328 m_pSecurityHandler.reset();
337 m_pSecurityHandler = NULL;
338 } 329 }
339 } 330 }
340 FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum) { 331 FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum) {
341 if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) { 332 if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
342 return 0; 333 return 0;
343 } 334 }
344 if (m_V5Type[objnum] == 1) { 335 if (m_V5Type[objnum] == 1) {
345 return m_CrossRef[objnum]; 336 return m_CrossRef[objnum];
346 } 337 }
347 if (m_V5Type[objnum] == 2) { 338 if (m_V5Type[objnum] == 2) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 m_Syntax.RestorePos(dwStartPos); 431 m_Syntax.RestorePos(dwStartPos);
441 void* pResult = 432 void* pResult =
442 FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), 433 FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
443 sizeof(FX_FILESIZE), CompareFileSize); 434 sizeof(FX_FILESIZE), CompareFileSize);
444 if (pResult == NULL) { 435 if (pResult == NULL) {
445 m_SortedOffset.Add(pos); 436 m_SortedOffset.Add(pos);
446 } 437 }
447 FX_DWORD start_objnum = 0; 438 FX_DWORD start_objnum = 0;
448 FX_DWORD count = dwObjCount; 439 FX_DWORD count = dwObjCount;
449 FX_FILESIZE SavedPos = m_Syntax.SavePos(); 440 FX_FILESIZE SavedPos = m_Syntax.SavePos();
450 int32_t recordsize = 20; 441 const int32_t recordsize = 20;
451 char* pBuf = FX_Alloc(char, 1024 * recordsize + 1); 442 std::vector<char> buf(1024 * recordsize + 1);
452 pBuf[1024 * recordsize] = '\0'; 443 buf[1024 * recordsize] = '\0';
453 int32_t nBlocks = count / 1024 + 1; 444 int32_t nBlocks = count / 1024 + 1;
454 for (int32_t block = 0; block < nBlocks; block++) { 445 for (int32_t block = 0; block < nBlocks; block++) {
455 int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024; 446 int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024;
456 FX_DWORD dwReadSize = block_size * recordsize; 447 FX_DWORD dwReadSize = block_size * recordsize;
457 if ((FX_FILESIZE)(dwStartPos + dwReadSize) > m_Syntax.m_FileLen) { 448 if ((FX_FILESIZE)(dwStartPos + dwReadSize) > m_Syntax.m_FileLen) {
458 FX_Free(pBuf);
459 return FALSE; 449 return FALSE;
460 } 450 }
461 if (!m_Syntax.ReadBlock((uint8_t*)pBuf, dwReadSize)) { 451 if (!m_Syntax.ReadBlock((uint8_t*)buf.data(), dwReadSize)) {
462 FX_Free(pBuf);
463 return FALSE; 452 return FALSE;
464 } 453 }
465 for (int32_t i = 0; i < block_size; i++) { 454 for (int32_t i = 0; i < block_size; i++) {
466 FX_DWORD objnum = start_objnum + block * 1024 + i; 455 FX_DWORD objnum = start_objnum + block * 1024 + i;
467 char* pEntry = pBuf + i * recordsize; 456 char* pEntry = buf.data() + i * recordsize;
468 if (pEntry[17] == 'f') { 457 if (pEntry[17] == 'f') {
469 m_CrossRef.SetAtGrow(objnum, 0); 458 m_CrossRef.SetAtGrow(objnum, 0);
470 m_V5Type.SetAtGrow(objnum, 0); 459 m_V5Type.SetAtGrow(objnum, 0);
471 } else { 460 } else {
472 int32_t offset = FXSYS_atoi(pEntry); 461 int32_t offset = FXSYS_atoi(pEntry);
473 if (offset == 0) { 462 if (offset == 0) {
474 for (int32_t c = 0; c < 10; c++) { 463 for (int32_t c = 0; c < 10; c++) {
475 if (pEntry[c] < '0' || pEntry[c] > '9') { 464 if (pEntry[c] < '0' || pEntry[c] > '9') {
476 FX_Free(pBuf);
477 return FALSE; 465 return FALSE;
478 } 466 }
479 } 467 }
480 } 468 }
481 m_CrossRef.SetAtGrow(objnum, offset); 469 m_CrossRef.SetAtGrow(objnum, offset);
482 int32_t version = FXSYS_atoi(pEntry + 11); 470 int32_t version = FXSYS_atoi(pEntry + 11);
483 if (version >= 1) { 471 if (version >= 1) {
484 m_bVersionUpdated = TRUE; 472 m_bVersionUpdated = TRUE;
485 } 473 }
486 m_ObjVersion.SetAtGrow(objnum, version); 474 m_ObjVersion.SetAtGrow(objnum, version);
487 if (m_CrossRef[objnum] < m_Syntax.m_FileLen) { 475 if (m_CrossRef[objnum] < m_Syntax.m_FileLen) {
488 void* pResult = FXSYS_bsearch( 476 void* pResult = FXSYS_bsearch(
489 &m_CrossRef[objnum], m_SortedOffset.GetData(), 477 &m_CrossRef[objnum], m_SortedOffset.GetData(),
490 m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), CompareFileSize); 478 m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), CompareFileSize);
491 if (pResult == NULL) { 479 if (pResult == NULL) {
492 m_SortedOffset.Add(m_CrossRef[objnum]); 480 m_SortedOffset.Add(m_CrossRef[objnum]);
493 } 481 }
494 } 482 }
495 m_V5Type.SetAtGrow(objnum, 1); 483 m_V5Type.SetAtGrow(objnum, 1);
496 } 484 }
497 } 485 }
498 } 486 }
499 FX_Free(pBuf);
500 m_Syntax.RestorePos(SavedPos + count * recordsize); 487 m_Syntax.RestorePos(SavedPos + count * recordsize);
501 return TRUE; 488 return TRUE;
502 } 489 }
503 490
504 bool CPDF_Parser::FindPosInOffsets(FX_FILESIZE pos) const { 491 bool CPDF_Parser::FindPosInOffsets(FX_FILESIZE pos) const {
505 return FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), 492 return FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
506 sizeof(FX_FILESIZE), CompareFileSize); 493 sizeof(FX_FILESIZE), CompareFileSize);
507 } 494 }
508 495
509 bool CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, 496 bool CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos,
(...skipping 22 matching lines...) Expand all
532 break; 519 break;
533 } 520 }
534 FX_DWORD start_objnum = FXSYS_atoi(word); 521 FX_DWORD start_objnum = FXSYS_atoi(word);
535 if (start_objnum >= (1 << 20)) 522 if (start_objnum >= (1 << 20))
536 return false; 523 return false;
537 524
538 FX_DWORD count = m_Syntax.GetDirectNum(); 525 FX_DWORD count = m_Syntax.GetDirectNum();
539 m_Syntax.ToNextWord(); 526 m_Syntax.ToNextWord();
540 SavedPos = m_Syntax.SavePos(); 527 SavedPos = m_Syntax.SavePos();
541 FX_BOOL bFirstItem = FALSE; 528 FX_BOOL bFirstItem = FALSE;
542 int32_t recordsize = 20; 529 const int32_t recordsize = 20;
543 if (bFirst) 530 if (bFirst)
544 bFirstItem = TRUE; 531 bFirstItem = TRUE;
545 m_dwXrefStartObjNum = start_objnum; 532 m_dwXrefStartObjNum = start_objnum;
546 if (!bSkip) { 533 if (!bSkip) {
547 char* pBuf = FX_Alloc(char, 1024 * recordsize + 1); 534 std::vector<char> buf(1024 * recordsize + 1);
548 pBuf[1024 * recordsize] = '\0'; 535 buf[1024 * recordsize] = '\0';
549 int32_t nBlocks = count / 1024 + 1; 536 int32_t nBlocks = count / 1024 + 1;
550 FX_BOOL bFirstBlock = TRUE; 537 FX_BOOL bFirstBlock = TRUE;
551 for (int32_t block = 0; block < nBlocks; block++) { 538 for (int32_t block = 0; block < nBlocks; block++) {
552 int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024; 539 int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024;
553 m_Syntax.ReadBlock((uint8_t*)pBuf, block_size * recordsize); 540 m_Syntax.ReadBlock((uint8_t*)buf.data(), block_size * recordsize);
554 for (int32_t i = 0; i < block_size; i++) { 541 for (int32_t i = 0; i < block_size; i++) {
555 FX_DWORD objnum = start_objnum + block * 1024 + i; 542 FX_DWORD objnum = start_objnum + block * 1024 + i;
556 char* pEntry = pBuf + i * recordsize; 543 char* pEntry = buf.data() + i * recordsize;
557 if (pEntry[17] == 'f') { 544 if (pEntry[17] == 'f') {
558 if (bFirstItem) { 545 if (bFirstItem) {
559 objnum = 0; 546 objnum = 0;
560 bFirstItem = FALSE; 547 bFirstItem = FALSE;
561 } 548 }
562 if (bFirstBlock) { 549 if (bFirstBlock) {
563 FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry); 550 FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry);
564 int32_t version = FXSYS_atoi(pEntry + 11); 551 int32_t version = FXSYS_atoi(pEntry + 11);
565 if (offset == 0 && version == 65535 && start_objnum != 0) { 552 if (offset == 0 && version == 65535 && start_objnum != 0) {
566 start_objnum--; 553 start_objnum--;
567 objnum = 0; 554 objnum = 0;
568 } 555 }
569 } 556 }
570 m_CrossRef.SetAtGrow(objnum, 0); 557 m_CrossRef.SetAtGrow(objnum, 0);
571 m_V5Type.SetAtGrow(objnum, 0); 558 m_V5Type.SetAtGrow(objnum, 0);
572 } else { 559 } else {
573 FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry); 560 FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry);
574 if (offset == 0) { 561 if (offset == 0) {
575 for (int32_t c = 0; c < 10; c++) { 562 for (int32_t c = 0; c < 10; c++) {
576 if (pEntry[c] < '0' || pEntry[c] > '9') { 563 if (pEntry[c] < '0' || pEntry[c] > '9') {
577 FX_Free(pBuf);
578 return false; 564 return false;
579 } 565 }
580 } 566 }
581 } 567 }
582 m_CrossRef.SetAtGrow(objnum, offset); 568 m_CrossRef.SetAtGrow(objnum, offset);
583 int32_t version = FXSYS_atoi(pEntry + 11); 569 int32_t version = FXSYS_atoi(pEntry + 11);
584 if (version >= 1) { 570 if (version >= 1) {
585 m_bVersionUpdated = TRUE; 571 m_bVersionUpdated = TRUE;
586 } 572 }
587 m_ObjVersion.SetAtGrow(objnum, version); 573 m_ObjVersion.SetAtGrow(objnum, version);
588 if (m_CrossRef[objnum] < m_Syntax.m_FileLen && 574 if (m_CrossRef[objnum] < m_Syntax.m_FileLen &&
589 !FindPosInOffsets(m_CrossRef[objnum])) { 575 !FindPosInOffsets(m_CrossRef[objnum])) {
590 m_SortedOffset.Add(m_CrossRef[objnum]); 576 m_SortedOffset.Add(m_CrossRef[objnum]);
591 } 577 }
592 m_V5Type.SetAtGrow(objnum, 1); 578 m_V5Type.SetAtGrow(objnum, 1);
593 } 579 }
594 if (bFirstBlock) { 580 if (bFirstBlock) {
595 bFirstBlock = FALSE; 581 bFirstBlock = FALSE;
596 } 582 }
597 } 583 }
598 } 584 }
599 FX_Free(pBuf);
600 } 585 }
601 m_Syntax.RestorePos(SavedPos + count * recordsize); 586 m_Syntax.RestorePos(SavedPos + count * recordsize);
602 } 587 }
603 return !streampos || LoadCrossRefV5(streampos, streampos, FALSE); 588 return !streampos || LoadCrossRefV5(streampos, streampos, FALSE);
604 } 589 }
605 590
606 FX_BOOL CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xrefpos) { 591 FX_BOOL CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xrefpos) {
607 if (!LoadCrossRefV5(xrefpos, xrefpos, TRUE)) { 592 if (!LoadCrossRefV5(xrefpos, xrefpos, TRUE)) {
608 return FALSE; 593 return FALSE;
609 } 594 }
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 return nullptr; 1454 return nullptr;
1470 1455
1471 nonstd::unique_ptr<CPDF_Object, ReleaseDeleter<CPDF_Object>> pObj( 1456 nonstd::unique_ptr<CPDF_Object, ReleaseDeleter<CPDF_Object>> pObj(
1472 m_Syntax.GetObject(m_pDocument, 0, 0, 0)); 1457 m_Syntax.GetObject(m_pDocument, 0, 0, 0));
1473 if (!ToDictionary(pObj.get())) 1458 if (!ToDictionary(pObj.get()))
1474 return nullptr; 1459 return nullptr;
1475 return pObj.release()->AsDictionary(); 1460 return pObj.release()->AsDictionary();
1476 } 1461 }
1477 1462
1478 FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision) { 1463 FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision) {
1479 if (m_pSecurityHandler == NULL) { 1464 if (!m_pSecurityHandler) {
1480 return (FX_DWORD)-1; 1465 return (FX_DWORD)-1;
1481 } 1466 }
1482 FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions(); 1467 FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions();
1483 if (m_pEncryptDict && 1468 if (m_pEncryptDict &&
1484 m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard")) { 1469 m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard")) {
1485 dwPermission &= 0xFFFFFFFC; 1470 dwPermission &= 0xFFFFFFFC;
1486 dwPermission |= 0xFFFFF0C0; 1471 dwPermission |= 0xFFFFF0C0;
1487 if (bCheckRevision && m_pEncryptDict->GetInteger(FX_BSTRC("R")) == 2) { 1472 if (bCheckRevision && m_pEncryptDict->GetInteger(FX_BSTRC("R")) == 2) {
1488 dwPermission &= 0xFFFFF0FF; 1473 dwPermission &= 0xFFFFF0FF;
1489 } 1474 }
1490 } 1475 }
1491 return dwPermission; 1476 return dwPermission;
1492 } 1477 }
1493 FX_BOOL CPDF_Parser::IsOwner() { 1478 FX_BOOL CPDF_Parser::IsOwner() {
1494 return m_pSecurityHandler == NULL ? TRUE : m_pSecurityHandler->IsOwner(); 1479 return m_pSecurityHandler == NULL ? TRUE : m_pSecurityHandler->IsOwner();
1495 } 1480 }
1496 void CPDF_Parser::SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, 1481 void CPDF_Parser::SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler,
1497 FX_BOOL bForced) { 1482 FX_BOOL bForced) {
1498 ASSERT(m_pSecurityHandler == NULL);
1499 if (!m_bForceUseSecurityHandler) {
1500 delete m_pSecurityHandler;
1501 m_pSecurityHandler = NULL;
1502 }
1503 m_bForceUseSecurityHandler = bForced; 1483 m_bForceUseSecurityHandler = bForced;
1504 m_pSecurityHandler = pSecurityHandler; 1484 m_pSecurityHandler.reset(pSecurityHandler);
1505 if (m_bForceUseSecurityHandler) { 1485 if (m_bForceUseSecurityHandler) {
1506 return; 1486 return;
1507 } 1487 }
1508 m_Syntax.m_pCryptoHandler = pSecurityHandler->CreateCryptoHandler(); 1488 m_Syntax.m_pCryptoHandler.reset(pSecurityHandler->CreateCryptoHandler());
1509 m_Syntax.m_pCryptoHandler->Init(NULL, pSecurityHandler); 1489 m_Syntax.m_pCryptoHandler->Init(NULL, pSecurityHandler);
1510 } 1490 }
1511 FX_BOOL CPDF_Parser::IsLinearizedFile(IFX_FileRead* pFileAccess, 1491 FX_BOOL CPDF_Parser::IsLinearizedFile(IFX_FileRead* pFileAccess,
1512 FX_DWORD offset) { 1492 FX_DWORD offset) {
1513 m_Syntax.InitParser(pFileAccess, offset); 1493 m_Syntax.InitParser(pFileAccess, offset);
1514 m_Syntax.RestorePos(m_Syntax.m_HeaderOffset + 9); 1494 m_Syntax.RestorePos(m_Syntax.m_HeaderOffset + 9);
1515 FX_FILESIZE SavedPos = m_Syntax.SavePos(); 1495 FX_FILESIZE SavedPos = m_Syntax.SavePos();
1516 FX_BOOL bIsNumber; 1496 FX_BOOL bIsNumber;
1517 CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber); 1497 CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
1518 if (!bIsNumber) { 1498 if (!bIsNumber) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 sizeof(FX_FILESIZE), CompareFileSize); 1677 sizeof(FX_FILESIZE), CompareFileSize);
1698 m_Syntax.m_MetadataObjnum = dwSaveMetadataObjnum; 1678 m_Syntax.m_MetadataObjnum = dwSaveMetadataObjnum;
1699 return PDFPARSE_ERROR_SUCCESS; 1679 return PDFPARSE_ERROR_SUCCESS;
1700 } 1680 }
1701 1681
1702 // static 1682 // static
1703 int CPDF_SyntaxParser::s_CurrentRecursionDepth = 0; 1683 int CPDF_SyntaxParser::s_CurrentRecursionDepth = 0;
1704 1684
1705 CPDF_SyntaxParser::CPDF_SyntaxParser() { 1685 CPDF_SyntaxParser::CPDF_SyntaxParser() {
1706 m_pFileAccess = NULL; 1686 m_pFileAccess = NULL;
1707 m_pCryptoHandler = NULL;
1708 m_pFileBuf = NULL; 1687 m_pFileBuf = NULL;
1709 m_BufSize = CPDF_ModuleMgr::kFileBufSize; 1688 m_BufSize = CPDF_ModuleMgr::kFileBufSize;
1710 m_pFileBuf = NULL; 1689 m_pFileBuf = NULL;
1711 m_MetadataObjnum = 0; 1690 m_MetadataObjnum = 0;
1712 m_dwWordPos = 0; 1691 m_dwWordPos = 0;
1713 m_bFileStream = FALSE; 1692 m_bFileStream = FALSE;
1714 } 1693 }
1715 CPDF_SyntaxParser::~CPDF_SyntaxParser() { 1694 CPDF_SyntaxParser::~CPDF_SyntaxParser() {
1716 FX_Free(m_pFileBuf); 1695 FX_Free(m_pFileBuf);
1717 } 1696 }
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
2402 } 2381 }
2403 // Locate the start of stream. 2382 // Locate the start of stream.
2404 ToNextLine(); 2383 ToNextLine();
2405 FX_FILESIZE streamStartPos = m_Pos; 2384 FX_FILESIZE streamStartPos = m_Pos;
2406 if (pContext) { 2385 if (pContext) {
2407 pContext->m_DataStart = streamStartPos; 2386 pContext->m_DataStart = streamStartPos;
2408 } 2387 }
2409 const unsigned int ENDSTREAM_LEN = sizeof("endstream") - 1; 2388 const unsigned int ENDSTREAM_LEN = sizeof("endstream") - 1;
2410 const unsigned int ENDOBJ_LEN = sizeof("endobj") - 1; 2389 const unsigned int ENDOBJ_LEN = sizeof("endobj") - 1;
2411 CPDF_CryptoHandler* pCryptoHandler = 2390 CPDF_CryptoHandler* pCryptoHandler =
2412 objnum == (FX_DWORD)m_MetadataObjnum ? nullptr : m_pCryptoHandler; 2391 objnum == (FX_DWORD)m_MetadataObjnum ? nullptr : m_pCryptoHandler.get();
2413 if (!pCryptoHandler) { 2392 if (!pCryptoHandler) {
2414 FX_BOOL bSearchForKeyword = TRUE; 2393 FX_BOOL bSearchForKeyword = TRUE;
2415 if (len >= 0) { 2394 if (len >= 0) {
2416 pdfium::base::CheckedNumeric<FX_FILESIZE> pos = m_Pos; 2395 pdfium::base::CheckedNumeric<FX_FILESIZE> pos = m_Pos;
2417 pos += len; 2396 pos += len;
2418 if (pos.IsValid() && pos.ValueOrDie() < m_FileLen) { 2397 if (pos.IsValid() && pos.ValueOrDie() < m_FileLen) {
2419 m_Pos = pos.ValueOrDie(); 2398 m_Pos = pos.ValueOrDie();
2420 } 2399 }
2421 m_Pos += ReadEOLMarkers(m_Pos); 2400 m_Pos += ReadEOLMarkers(m_Pos);
2422 FXSYS_memset(m_WordBuffer, 0, ENDSTREAM_LEN + 1); 2401 FXSYS_memset(m_WordBuffer, 0, ENDSTREAM_LEN + 1);
(...skipping 2185 matching lines...) Expand 10 before | Expand all | Expand 10 after
4608 return FALSE; 4587 return FALSE;
4609 } 4588 }
4610 CPDF_PageNode::~CPDF_PageNode() { 4589 CPDF_PageNode::~CPDF_PageNode() {
4611 int32_t iSize = m_childNode.GetSize(); 4590 int32_t iSize = m_childNode.GetSize();
4612 for (int32_t i = 0; i < iSize; ++i) { 4591 for (int32_t i = 0; i < iSize; ++i) {
4613 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i]; 4592 CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i];
4614 delete pNode; 4593 delete pNode;
4615 } 4594 }
4616 m_childNode.RemoveAll(); 4595 m_childNode.RemoveAll();
4617 } 4596 }
OLDNEW
« no previous file with comments | « core/include/fpdfapi/fpdf_parser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698