xref: /aosp_15_r20/external/pdfium/core/fpdfapi/parser/cpdf_object_avail.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2017 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_
6 #define CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_
7 
8 #include <set>
9 #include <stack>
10 
11 #include "core/fpdfapi/parser/cpdf_data_avail.h"
12 #include "core/fxcrt/retain_ptr.h"
13 #include "core/fxcrt/unowned_ptr.h"
14 
15 class CPDF_Object;
16 class CPDF_IndirectObjectHolder;
17 class CPDF_ReadValidator;
18 
19 // Helper for check availability of object tree.
20 class CPDF_ObjectAvail {
21  public:
22   CPDF_ObjectAvail(RetainPtr<CPDF_ReadValidator> validator,
23                    CPDF_IndirectObjectHolder* holder,
24                    RetainPtr<const CPDF_Object> root);
25   CPDF_ObjectAvail(RetainPtr<CPDF_ReadValidator> validator,
26                    CPDF_IndirectObjectHolder* holder,
27                    uint32_t obj_num);
28   virtual ~CPDF_ObjectAvail();
29 
30   CPDF_DataAvail::DocAvailStatus CheckAvail();
31 
32  protected:
33   virtual bool ExcludeObject(const CPDF_Object* object) const;
34 
35  private:
36   bool LoadRootObject();
37   bool CheckObjects();
38   bool AppendObjectSubRefs(RetainPtr<const CPDF_Object> object,
39                            std::stack<uint32_t>* refs) const;
40   void CleanMemory();
41   bool HasObjectParsed(uint32_t obj_num) const;
42 
43   RetainPtr<CPDF_ReadValidator> const validator_;
44   UnownedPtr<CPDF_IndirectObjectHolder> const holder_;
45   RetainPtr<const CPDF_Object> root_;
46   std::set<uint32_t> parsed_objnums_;
47   std::stack<uint32_t> non_parsed_objects_;
48 };
49 
50 #endif  // CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_
51