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

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

Issue 1243883003: Fix else-after-returns throughout pdfium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 5 years, 5 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 "../../../include/fpdfapi/fpdf_parser.h" 7 #include "../../../include/fpdfapi/fpdf_parser.h"
8 #include "../../../include/fxcrt/fx_string.h" 8 #include "../../../include/fxcrt/fx_string.h"
9 9
10 //static 10 //static
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 } 153 }
154 return pObj->GetDict(); 154 return pObj->GetDict();
155 } 155 }
156 } 156 }
157 return NULL; 157 return NULL;
158 } 158 }
159 CPDF_Array* CPDF_Object::GetArray() const 159 CPDF_Array* CPDF_Object::GetArray() const
160 { 160 {
161 if (m_Type == PDFOBJ_ARRAY) 161 if (m_Type == PDFOBJ_ARRAY)
162 return (CPDF_Array*)this; 162 return (CPDF_Array*)this;
163 else 163
164 return NULL; 164 return NULL;
165 } 165 }
166 void CPDF_Object::SetString(const CFX_ByteString& str) 166 void CPDF_Object::SetString(const CFX_ByteString& str)
167 { 167 {
168 ASSERT(this != NULL); 168 ASSERT(this != NULL);
169 switch (m_Type) { 169 switch (m_Type) {
170 case PDFOBJ_BOOLEAN: 170 case PDFOBJ_BOOLEAN:
171 ((CPDF_Boolean*)this)->m_bValue = str == FX_BSTRC("true") ? 1 : 0; 171 ((CPDF_Boolean*)this)->m_bValue = str == FX_BSTRC("true") ? 1 : 0;
172 return; 172 return;
173 case PDFOBJ_NUMBER: 173 case PDFOBJ_NUMBER:
174 ((CPDF_Number*)this)->SetString(str); 174 ((CPDF_Number*)this)->SetString(str);
(...skipping 19 matching lines...) Expand all
194 { 194 {
195 if (this == pOther) { 195 if (this == pOther) {
196 return TRUE; 196 return TRUE;
197 } 197 }
198 if (pOther == NULL) { 198 if (pOther == NULL) {
199 return FALSE; 199 return FALSE;
200 } 200 }
201 if (pOther->m_Type != m_Type) { 201 if (pOther->m_Type != m_Type) {
202 if (m_Type == PDFOBJ_REFERENCE && GetDirect()) { 202 if (m_Type == PDFOBJ_REFERENCE && GetDirect()) {
203 return GetDirect()->IsIdentical(pOther); 203 return GetDirect()->IsIdentical(pOther);
204 } else if (pOther->m_Type == PDFOBJ_REFERENCE) { 204 }
205 if (pOther->m_Type == PDFOBJ_REFERENCE) {
205 return IsIdentical(pOther->GetDirect()); 206 return IsIdentical(pOther->GetDirect());
206 } 207 }
207 return FALSE; 208 return FALSE;
208 } 209 }
209 switch (m_Type) { 210 switch (m_Type) {
210 case PDFOBJ_BOOLEAN: 211 case PDFOBJ_BOOLEAN:
211 return (((CPDF_Boolean*)this)->Identical((CPDF_Boolean*)pOther)); 212 return (((CPDF_Boolean*)this)->Identical((CPDF_Boolean*)pOther));
212 case PDFOBJ_NUMBER: 213 case PDFOBJ_NUMBER:
213 return (((CPDF_Number*)this)->Identical((CPDF_Number*)pOther)); 214 return (((CPDF_Number*)this)->Identical((CPDF_Number*)pOther));
214 case PDFOBJ_STRING: 215 case PDFOBJ_STRING:
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 return pCopy; 279 return pCopy;
279 } 280 }
280 case PDFOBJ_NULL: { 281 case PDFOBJ_NULL: {
281 return new CPDF_Null; 282 return new CPDF_Null;
282 } 283 }
283 case PDFOBJ_STREAM: { 284 case PDFOBJ_STREAM: {
284 CPDF_Stream* pThis = (CPDF_Stream*)this; 285 CPDF_Stream* pThis = (CPDF_Stream*)this;
285 CPDF_StreamAcc acc; 286 CPDF_StreamAcc acc;
286 acc.LoadAllData(pThis, TRUE); 287 acc.LoadAllData(pThis, TRUE);
287 FX_DWORD streamSize = acc.GetSize(); 288 FX_DWORD streamSize = acc.GetSize();
288 CPDF_Stream* pObj; 289 if (!pThis->GetDict())
Lei Zhang 2015/07/21 23:43:23 Since the two return lines are similar, how about:
Tom Sepez 2015/07/22 20:38:24 Something like that.
289 if (pThis->GetDict()) 290 return new CPDF_Stream(acc.DetachData(), streamSize, NULL);
290 pObj = new CPDF_Stream(acc.DetachData(), streamSize, (CPDF_D ictionary*)((CPDF_Object*)pThis->GetDict())->CloneInternal(bDirect, visited)); 291
291 else 292 return new CPDF_Stream(acc.DetachData(), streamSize,
292 pObj = new CPDF_Stream(acc.DetachData(), streamSize, NULL); 293 (CPDF_Dictionary*)((CPDF_Object*)pThis->G etDict())->CloneInternal(bDirect, visited));
293 return pObj;
294 } 294 }
295 case PDFOBJ_REFERENCE: { 295 case PDFOBJ_REFERENCE: {
296 CPDF_Reference* pRef = (CPDF_Reference*)this; 296 CPDF_Reference* pRef = (CPDF_Reference*)this;
297 FX_DWORD obj_num = pRef->m_RefObjNum; 297 FX_DWORD obj_num = pRef->m_RefObjNum;
298 if (bDirect && !visited->GetValueAt((void*)(uintptr_t)obj_num)) { 298 if (bDirect && !visited->GetValueAt((void*)(uintptr_t)obj_num)) {
299 visited->SetAt((void*)(uintptr_t)obj_num, (void*)1); 299 visited->SetAt((void*)(uintptr_t)obj_num, (void*)1);
300 CPDF_Object* ret; 300 if (!pRef->GetDirect())
301 if (pRef->GetDirect()) 301 return nullptr;
302 ret = pRef->GetDirect()->CloneInternal(TRUE, visited); 302
303 else 303 return pRef->GetDirect()->CloneInternal(TRUE, visited);
304 ret = NULL;
305 return ret;
306 } else {
307 return new CPDF_Reference(pRef->m_pObjList, obj_num);
308 } 304 }
305 return new CPDF_Reference(pRef->m_pObjList, obj_num);
309 } 306 }
310 } 307 }
311 return NULL; 308 return NULL;
312 } 309 }
313 CPDF_Object* CPDF_Object::CloneRef(CPDF_IndirectObjects* pDoc) const 310 CPDF_Object* CPDF_Object::CloneRef(CPDF_IndirectObjects* pDoc) const
314 { 311 {
315 if (m_ObjNum) { 312 if (m_ObjNum) {
316 return new CPDF_Reference(pDoc, m_ObjNum); 313 return new CPDF_Reference(pDoc, m_ObjNum);
317 } 314 }
318 return Clone(); 315 return Clone();
319 } 316 }
320 CFX_WideString CPDF_Object::GetUnicodeText(CFX_CharMap* pCharMap) const 317 CFX_WideString CPDF_Object::GetUnicodeText(CFX_CharMap* pCharMap) const
321 { 318 {
322 if (m_Type == PDFOBJ_STRING) { 319 if (m_Type == PDFOBJ_STRING) {
323 return PDF_DecodeText(((CPDF_String*)this)->m_String, pCharMap); 320 return PDF_DecodeText(((CPDF_String*)this)->m_String, pCharMap);
324 } else if (m_Type == PDFOBJ_STREAM) { 321 }
322 if (m_Type == PDFOBJ_STREAM) {
325 CPDF_StreamAcc stream; 323 CPDF_StreamAcc stream;
326 stream.LoadAllData((CPDF_Stream*)this, FALSE); 324 stream.LoadAllData((CPDF_Stream*)this, FALSE);
327 CFX_WideString result = PDF_DecodeText(stream.GetData(), stream.GetSize( ), pCharMap); 325 CFX_WideString result = PDF_DecodeText(stream.GetData(), stream.GetSize( ), pCharMap);
328 return result; 326 return result;
329 } else if (m_Type == PDFOBJ_NAME) { 327 }
328 if (m_Type == PDFOBJ_NAME) {
330 return PDF_DecodeText(((CPDF_Name*)this)->m_Name, pCharMap); 329 return PDF_DecodeText(((CPDF_Name*)this)->m_Name, pCharMap);
331 } 330 }
332 return CFX_WideString(); 331 return CFX_WideString();
333 } 332 }
334 void CPDF_Object::SetUnicodeText(const FX_WCHAR* pUnicodes, int len) 333 void CPDF_Object::SetUnicodeText(const FX_WCHAR* pUnicodes, int len)
335 { 334 {
336 if (m_Type == PDFOBJ_STRING) { 335 if (m_Type == PDFOBJ_STRING) {
337 ((CPDF_String*)this)->m_String = PDF_EncodeText(pUnicodes, len); 336 ((CPDF_String*)this)->m_String = PDF_EncodeText(pUnicodes, len);
338 } else if (m_Type == PDFOBJ_STREAM) { 337 } else if (m_Type == PDFOBJ_STREAM) {
339 CFX_ByteString result = PDF_EncodeText(pUnicodes, len); 338 CFX_ByteString result = PDF_EncodeText(pUnicodes, len);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 return NULL; 419 return NULL;
421 } 420 }
422 return ((CPDF_Object*)m_Objects.GetAt(i))->GetDirect(); 421 return ((CPDF_Object*)m_Objects.GetAt(i))->GetDirect();
423 } 422 }
424 CFX_ByteString CPDF_Array::GetString(FX_DWORD i) const 423 CFX_ByteString CPDF_Array::GetString(FX_DWORD i) const
425 { 424 {
426 if (i < (FX_DWORD)m_Objects.GetSize()) { 425 if (i < (FX_DWORD)m_Objects.GetSize()) {
427 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 426 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
428 return p->GetString(); 427 return p->GetString();
429 } 428 }
430 else 429 return CFX_ByteString();
431 return CFX_ByteString();
432 } 430 }
433 CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const 431 CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const
434 { 432 {
435 if (i < (FX_DWORD)m_Objects.GetSize()) { 433 if (i < (FX_DWORD)m_Objects.GetSize()) {
436 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 434 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
437 return p->GetConstString(); 435 return p->GetConstString();
438 } 436 }
439 else 437 return CFX_ByteStringC();
440 return CFX_ByteStringC();
441 } 438 }
442 int CPDF_Array::GetInteger(FX_DWORD i) const 439 int CPDF_Array::GetInteger(FX_DWORD i) const
443 { 440 {
444 if (i >= (FX_DWORD)m_Objects.GetSize()) { 441 if (i >= (FX_DWORD)m_Objects.GetSize()) {
445 return 0; 442 return 0;
446 } 443 }
447 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 444 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
448 return p->GetInteger(); 445 return p->GetInteger();
449 } 446 }
450 FX_FLOAT CPDF_Array::GetNumber(FX_DWORD i) const 447 FX_FLOAT CPDF_Array::GetNumber(FX_DWORD i) const
451 { 448 {
452 if (i >= (FX_DWORD)m_Objects.GetSize()) { 449 if (i >= (FX_DWORD)m_Objects.GetSize()) {
453 return 0; 450 return 0;
454 } 451 }
455 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); 452 CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
456 return p->GetNumber(); 453 return p->GetNumber();
457 } 454 }
458 CPDF_Dictionary* CPDF_Array::GetDict(FX_DWORD i) const 455 CPDF_Dictionary* CPDF_Array::GetDict(FX_DWORD i) const
459 { 456 {
460 CPDF_Object* p = GetElementValue(i); 457 CPDF_Object* p = GetElementValue(i);
461 if (p == NULL) { 458 if (!p) {
462 return NULL; 459 return NULL;
463 } else if (p->GetType() == PDFOBJ_DICTIONARY) { 460 }
461 if (p->GetType() == PDFOBJ_DICTIONARY) {
464 return (CPDF_Dictionary*)p; 462 return (CPDF_Dictionary*)p;
465 } else if (p->GetType() == PDFOBJ_STREAM) { 463 }
464 if (p->GetType() == PDFOBJ_STREAM) {
466 return ((CPDF_Stream*)p)->GetDict(); 465 return ((CPDF_Stream*)p)->GetDict();
467 } 466 }
468 return NULL; 467 return NULL;
469 } 468 }
470 CPDF_Stream* CPDF_Array::GetStream(FX_DWORD i) const 469 CPDF_Stream* CPDF_Array::GetStream(FX_DWORD i) const
471 { 470 {
472 CPDF_Object* p = GetElementValue(i); 471 CPDF_Object* p = GetElementValue(i);
473 if (p == NULL || p->GetType() != PDFOBJ_STREAM) { 472 if (p == NULL || p->GetType() != PDFOBJ_STREAM) {
474 return NULL; 473 return NULL;
475 } 474 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 CPDF_Object* CPDF_Dictionary::GetElementValue(const CFX_ByteStringC& key) const 596 CPDF_Object* CPDF_Dictionary::GetElementValue(const CFX_ByteStringC& key) const
598 { 597 {
599 CPDF_Object* p = NULL; 598 CPDF_Object* p = NULL;
600 m_Map.Lookup(key, (void*&)p); 599 m_Map.Lookup(key, (void*&)p);
601 return p ? p->GetDirect() : NULL; 600 return p ? p->GetDirect() : NULL;
602 } 601 }
603 CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const 602 CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const
604 { 603 {
605 CPDF_Object* p = NULL; 604 CPDF_Object* p = NULL;
606 m_Map.Lookup(key, (void*&)p); 605 m_Map.Lookup(key, (void*&)p);
607 if (p) 606 if (p) {
608 return p->GetString(); 607 return p->GetString();
609 else 608 }
610 return CFX_ByteString(); 609 return CFX_ByteString();
611 } 610 }
612 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key) cons t 611 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key) cons t
613 { 612 {
614 CPDF_Object* p = NULL; 613 CPDF_Object* p = NULL;
615 m_Map.Lookup(key, (void*&)p); 614 m_Map.Lookup(key, (void*&)p);
616 if (p) 615 if (p) {
617 return p->GetConstString(); 616 return p->GetConstString();
618 else 617 }
619 return CFX_ByteStringC(); 618 return CFX_ByteStringC();
620 } 619 }
621 CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key, CFX_C harMap* pCharMap) const 620 CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key, CFX_C harMap* pCharMap) const
622 { 621 {
623 CPDF_Object* p = NULL; 622 CPDF_Object* p = NULL;
624 m_Map.Lookup(key, (void*&)p); 623 m_Map.Lookup(key, (void*&)p);
625 if (p) { 624 if (p) {
626 if(p->GetType() == PDFOBJ_REFERENCE) { 625 if(p->GetType() == PDFOBJ_REFERENCE) {
627 p = ((CPDF_Reference*)p)->GetDirect(); 626 p = ((CPDF_Reference*)p)->GetDirect();
628 if (p) { 627 if (p) {
629 return p->GetUnicodeText(pCharMap); 628 return p->GetUnicodeText(pCharMap);
(...skipping 10 matching lines...) Expand all
640 m_Map.Lookup(key, (void*&)p); 639 m_Map.Lookup(key, (void*&)p);
641 if (p) { 640 if (p) {
642 return p->GetString(); 641 return p->GetString();
643 } 642 }
644 return CFX_ByteString(def); 643 return CFX_ByteString(def);
645 } 644 }
646 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, cons t CFX_ByteStringC& def) const 645 CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, cons t CFX_ByteStringC& def) const
647 { 646 {
648 CPDF_Object* p = NULL; 647 CPDF_Object* p = NULL;
649 m_Map.Lookup(key, (void*&)p); 648 m_Map.Lookup(key, (void*&)p);
650 if (p) 649 if (p) {
651 return p->GetConstString(); 650 return p->GetConstString();
652 else 651 }
653 return CFX_ByteStringC(def); 652 return CFX_ByteStringC(def);
654 } 653 }
655 int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key) const 654 int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key) const
656 { 655 {
657 CPDF_Object* p = NULL; 656 CPDF_Object* p = NULL;
658 m_Map.Lookup(key, (void*&)p); 657 m_Map.Lookup(key, (void*&)p);
659 if (p) { 658 if (p) {
660 return p->GetInteger(); 659 return p->GetInteger();
661 } 660 }
662 return 0; 661 return 0;
663 } 662 }
(...skipping 20 matching lines...) Expand all
684 CPDF_Object* p = NULL; 683 CPDF_Object* p = NULL;
685 m_Map.Lookup(key, (void*&)p); 684 m_Map.Lookup(key, (void*&)p);
686 if (p && p->GetType() == PDFOBJ_BOOLEAN) { 685 if (p && p->GetType() == PDFOBJ_BOOLEAN) {
687 return p->GetInteger(); 686 return p->GetInteger();
688 } 687 }
689 return bDefault; 688 return bDefault;
690 } 689 }
691 CPDF_Dictionary* CPDF_Dictionary::GetDict(const CFX_ByteStringC& key) const 690 CPDF_Dictionary* CPDF_Dictionary::GetDict(const CFX_ByteStringC& key) const
692 { 691 {
693 CPDF_Object* p = GetElementValue(key); 692 CPDF_Object* p = GetElementValue(key);
694 if (p == NULL) { 693 if (!p) {
695 return NULL; 694 return nullptr;
696 } else if (p->GetType() == PDFOBJ_DICTIONARY) { 695 }
696 if (p->GetType() == PDFOBJ_DICTIONARY) {
697 return (CPDF_Dictionary*)p; 697 return (CPDF_Dictionary*)p;
698 } else if (p->GetType() == PDFOBJ_STREAM) { 698 }
699 if (p->GetType() == PDFOBJ_STREAM) {
699 return ((CPDF_Stream*)p)->GetDict(); 700 return ((CPDF_Stream*)p)->GetDict();
700 } 701 }
701 return NULL; 702 return nullptr;
702 } 703 }
703 CPDF_Array* CPDF_Dictionary::GetArray(const CFX_ByteStringC& key) const 704 CPDF_Array* CPDF_Dictionary::GetArray(const CFX_ByteStringC& key) const
704 { 705 {
705 CPDF_Object* p = GetElementValue(key); 706 CPDF_Object* p = GetElementValue(key);
706 if (p == NULL || p->GetType() != PDFOBJ_ARRAY) { 707 if (p == NULL || p->GetType() != PDFOBJ_ARRAY) {
707 return NULL; 708 return NULL;
708 } 709 }
709 return (CPDF_Array*)p; 710 return (CPDF_Array*)p;
710 } 711 }
711 CPDF_Stream* CPDF_Dictionary::GetStream(const CFX_ByteStringC& key) const 712 CPDF_Stream* CPDF_Dictionary::GetStream(const CFX_ByteStringC& key) const
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 ((CPDF_Object*)value)->Destroy(); 1263 ((CPDF_Object*)value)->Destroy();
1263 m_IndirectObjs.RemoveKey((void*)(uintptr_t)objnum); 1264 m_IndirectObjs.RemoveKey((void*)(uintptr_t)objnum);
1264 } 1265 }
1265 void CPDF_IndirectObjects::InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pO bj) 1266 void CPDF_IndirectObjects::InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pO bj)
1266 { 1267 {
1267 if (objnum == 0 || pObj == NULL) { 1268 if (objnum == 0 || pObj == NULL) {
1268 return; 1269 return;
1269 } 1270 }
1270 void* value = NULL; 1271 void* value = NULL;
1271 if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) { 1272 if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
1272 if (value) 1273 if (value) {
1273 { 1274 if (pObj->GetGenNum() <= ((CPDF_Object*)value)->GetGenNum()) {
1274 if (pObj->GetGenNum() <= ((CPDF_Object*)value)->GetGenNum())
1275 return; 1275 return;
1276 else 1276 }
1277 ((CPDF_Object*)value)->Destroy(); 1277 ((CPDF_Object*)value)->Destroy();
1278 } 1278 }
1279 } 1279 }
1280 pObj->m_ObjNum = objnum; 1280 pObj->m_ObjNum = objnum;
1281 m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj); 1281 m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj);
1282 if (m_LastObjNum < objnum) { 1282 if (m_LastObjNum < objnum) {
1283 m_LastObjNum = objnum; 1283 m_LastObjNum = objnum;
1284 } 1284 }
1285 } 1285 }
1286 FX_DWORD CPDF_IndirectObjects::GetLastObjNum() const 1286 FX_DWORD CPDF_IndirectObjects::GetLastObjNum() const
1287 { 1287 {
1288 return m_LastObjNum; 1288 return m_LastObjNum;
1289 } 1289 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698