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

Side by Side Diff: core/fpdfapi/fpdf_page/fpdf_page_parser.cpp

Issue 2345063002: Use string pools in some dictionaries (Closed)
Patch Set: windows compile Created 4 years, 2 months 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
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 "core/fpdfapi/fpdf_page/pageint.h" 7 #include "core/fpdfapi/fpdf_page/pageint.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 } 274 }
275 m_ParamCount++; 275 m_ParamCount++;
276 return index; 276 return index;
277 } 277 }
278 278
279 void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) { 279 void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) {
280 CFX_ByteStringC bsName(name, len); 280 CFX_ByteStringC bsName(name, len);
281 ContentParam& param = m_ParamBuf[GetNextParamPos()]; 281 ContentParam& param = m_ParamBuf[GetNextParamPos()];
282 if (len > 32) { 282 if (len > 32) {
283 param.m_Type = ContentParam::OBJECT; 283 param.m_Type = ContentParam::OBJECT;
284 param.m_pObject = new CPDF_Name(PDF_NameDecode(bsName)); 284 param.m_pObject = new CPDF_Name(
285 m_pDocument->GetByteStringPool()->Intern(PDF_NameDecode(bsName)));
285 } else { 286 } else {
286 param.m_Type = ContentParam::NAME; 287 param.m_Type = ContentParam::NAME;
287 if (bsName.Find('#') == -1) { 288 if (bsName.Find('#') == -1) {
288 FXSYS_memcpy(param.m_Name.m_Buffer, name, len); 289 FXSYS_memcpy(param.m_Name.m_Buffer, name, len);
289 param.m_Name.m_Len = len; 290 param.m_Name.m_Len = len;
290 } else { 291 } else {
291 CFX_ByteString str = PDF_NameDecode(bsName); 292 CFX_ByteString str = PDF_NameDecode(bsName);
292 FXSYS_memcpy(param.m_Name.m_Buffer, str.c_str(), str.GetLength()); 293 FXSYS_memcpy(param.m_Name.m_Buffer, str.c_str(), str.GetLength());
293 param.m_Name.m_Len = str.GetLength(); 294 param.m_Name.m_Len = str.GetLength();
294 } 295 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 if (param.m_Type == ContentParam::NUMBER) { 337 if (param.m_Type == ContentParam::NUMBER) {
337 CPDF_Number* pNumber = param.m_Number.m_bInteger 338 CPDF_Number* pNumber = param.m_Number.m_bInteger
338 ? new CPDF_Number(param.m_Number.m_Integer) 339 ? new CPDF_Number(param.m_Number.m_Integer)
339 : new CPDF_Number(param.m_Number.m_Float); 340 : new CPDF_Number(param.m_Number.m_Float);
340 341
341 param.m_Type = ContentParam::OBJECT; 342 param.m_Type = ContentParam::OBJECT;
342 param.m_pObject = pNumber; 343 param.m_pObject = pNumber;
343 return pNumber; 344 return pNumber;
344 } 345 }
345 if (param.m_Type == ContentParam::NAME) { 346 if (param.m_Type == ContentParam::NAME) {
346 CPDF_Name* pName = new CPDF_Name( 347 CPDF_Name* pName = new CPDF_Name(m_pDocument->GetByteStringPool()->Intern(
347 CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len)); 348 CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len)));
348 param.m_Type = ContentParam::OBJECT; 349 param.m_Type = ContentParam::OBJECT;
349 param.m_pObject = pName; 350 param.m_pObject = pName;
350 return pName; 351 return pName;
351 } 352 }
352 if (param.m_Type == ContentParam::OBJECT) { 353 if (param.m_Type == ContentParam::OBJECT) {
353 return param.m_pObject; 354 return param.m_pObject;
354 } 355 }
355 ASSERT(FALSE); 356 ASSERT(FALSE);
356 return nullptr; 357 return nullptr;
357 } 358 }
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 return; 583 return;
583 bDirect = FALSE; 584 bDirect = FALSE;
584 } 585 }
585 if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) { 586 if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) {
586 m_CurContentMark.AddMark(tag, pDict, bDirect); 587 m_CurContentMark.AddMark(tag, pDict, bDirect);
587 } 588 }
588 } 589 }
589 590
590 void CPDF_StreamContentParser::Handle_BeginImage() { 591 void CPDF_StreamContentParser::Handle_BeginImage() {
591 FX_FILESIZE savePos = m_pSyntax->GetPos(); 592 FX_FILESIZE savePos = m_pSyntax->GetPos();
592 CPDF_Dictionary* pDict = new CPDF_Dictionary; 593 CPDF_Dictionary* pDict =
594 new CPDF_Dictionary(m_pDocument->GetByteStringPool());
593 while (1) { 595 while (1) {
594 CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement(); 596 CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
595 if (type == CPDF_StreamParser::Keyword) { 597 if (type == CPDF_StreamParser::Keyword) {
596 CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(), 598 CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(),
597 m_pSyntax->GetWordSize()); 599 m_pSyntax->GetWordSize());
598 if (bsKeyword != "ID") { 600 if (bsKeyword != "ID") {
599 m_pSyntax->SetPos(savePos); 601 m_pSyntax->SetPos(savePos);
600 pDict->Release(); 602 pDict->Release();
601 return; 603 return;
602 } 604 }
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 } 1494 }
1493 } 1495 }
1494 1496
1495 uint32_t CPDF_StreamContentParser::Parse(const uint8_t* pData, 1497 uint32_t CPDF_StreamContentParser::Parse(const uint8_t* pData,
1496 uint32_t dwSize, 1498 uint32_t dwSize,
1497 uint32_t max_cost) { 1499 uint32_t max_cost) {
1498 if (m_Level > _FPDF_MAX_FORM_LEVEL_) { 1500 if (m_Level > _FPDF_MAX_FORM_LEVEL_) {
1499 return dwSize; 1501 return dwSize;
1500 } 1502 }
1501 uint32_t InitObjCount = m_pObjectHolder->GetPageObjectList()->size(); 1503 uint32_t InitObjCount = m_pObjectHolder->GetPageObjectList()->size();
1502 CPDF_StreamParser syntax(pData, dwSize); 1504 CPDF_StreamParser syntax(pData, dwSize, m_pDocument->GetByteStringPool());
1503 CPDF_StreamParserAutoClearer auto_clearer(&m_pSyntax, &syntax); 1505 CPDF_StreamParserAutoClearer auto_clearer(&m_pSyntax, &syntax);
1504 while (1) { 1506 while (1) {
1505 uint32_t cost = m_pObjectHolder->GetPageObjectList()->size() - InitObjCount; 1507 uint32_t cost = m_pObjectHolder->GetPageObjectList()->size() - InitObjCount;
1506 if (max_cost && cost >= max_cost) { 1508 if (max_cost && cost >= max_cost) {
1507 break; 1509 break;
1508 } 1510 }
1509 switch (syntax.ParseNextElement()) { 1511 switch (syntax.ParseNextElement()) {
1510 case CPDF_StreamParser::EndOfData: 1512 case CPDF_StreamParser::EndOfData:
1511 return m_pSyntax->GetPos(); 1513 return m_pSyntax->GetPos();
1512 case CPDF_StreamParser::Keyword: 1514 case CPDF_StreamParser::Keyword:
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 } else { 1673 } else {
1672 PDF_ReplaceAbbr(pElement); 1674 PDF_ReplaceAbbr(pElement);
1673 } 1675 }
1674 } 1676 }
1675 break; 1677 break;
1676 } 1678 }
1677 default: 1679 default:
1678 break; 1680 break;
1679 } 1681 }
1680 } 1682 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_page/fpdf_page_doc.cpp ('k') | core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698