Commit 27e1433365431cf81ee962a43fb171fc35f7130e

Authored by m-holger
1 parent 2774ac30

Rename `objects_*` limits to `parser_*` for clarity and consistency. Update rela…

…ted tests, documentation, and references across the codebase.
include/qpdf/Constants.h
... ... @@ -281,10 +281,10 @@ enum qpdf_param_e {
281 281 /* global limits */
282 282  
283 283 /* object - parser limits */
284   - qpdf_p_objects_max_nesting = 0x12000,
285   - qpdf_p_objects_max_errors,
286   - qpdf_p_objects_max_container_size,
287   - qpdf_p_objects_max_container_size_damaged,
  284 + qpdf_p_parser_max_nesting = 0x13000,
  285 + qpdf_p_parser_max_errors,
  286 + qpdf_p_parser_max_container_size,
  287 + qpdf_p_parser_max_container_size_damaged,
288 288  
289 289 /* next section = 0x20000 */
290 290 qpdf_enum_max = 0x7fffffff,
... ...
include/qpdf/global.hh
... ... @@ -104,9 +104,9 @@ namespace qpdf::global
104 104 /// @note The maximum nesting level cannot be disabled by calling `default_limit(false)`.
105 105 ///
106 106 /// @since 12.3
107   - uint32_t inline objects_max_nesting()
  107 + uint32_t inline parser_max_nesting()
108 108 {
109   - return get_uint32(qpdf_p_objects_max_nesting);
  109 + return get_uint32(qpdf_p_parser_max_nesting);
110 110 }
111 111  
112 112 /// @brief Sets the maximum nesting level while parsing objects.
... ... @@ -116,9 +116,9 @@ namespace qpdf::global
116 116 /// @note The maximum nesting level cannot be disabled by calling `default_limit(false)`.
117 117 ///
118 118 /// @since 12.3
119   - void inline objects_max_nesting(uint32_t value)
  119 + void inline parser_max_nesting(uint32_t value)
120 120 {
121   - set_uint32(qpdf_p_objects_max_nesting, value);
  121 + set_uint32(qpdf_p_parser_max_nesting, value);
122 122 }
123 123  
124 124 /// @brief Retrieves the maximum number of errors allowed while parsing objects.
... ... @@ -128,9 +128,9 @@ namespace qpdf::global
128 128 /// @return The maximum number of errors allowed while parsing objects.
129 129 ///
130 130 /// @since 12.3
131   - uint32_t inline objects_max_errors()
  131 + uint32_t inline parser_max_errors()
132 132 {
133   - return get_uint32(qpdf_p_objects_max_errors);
  133 + return get_uint32(qpdf_p_parser_max_errors);
134 134 }
135 135  
136 136 /// Sets the maximum number of errors allowed while parsing objects.
... ... @@ -140,9 +140,9 @@ namespace qpdf::global
140 140 /// @param value The maximum number of errors allowed while parsing objects to set.
141 141 ///
142 142 /// @since 12.3
143   - void inline objects_max_errors(uint32_t value)
  143 + void inline parser_max_errors(uint32_t value)
144 144 {
145   - set_uint32(qpdf_p_objects_max_errors, value);
  145 + set_uint32(qpdf_p_parser_max_errors, value);
146 146 }
147 147  
148 148 /// @brief Retrieves the maximum number of objectstop-level allowed in a container while
... ... @@ -155,9 +155,9 @@ namespace qpdf::global
155 155 /// objects.
156 156 ///
157 157 /// @since 12.3
158   - uint32_t inline objects_max_container_size()
  158 + uint32_t inline parser_max_container_size()
159 159 {
160   - return get_uint32(qpdf_p_objects_max_container_size);
  160 + return get_uint32(qpdf_p_parser_max_container_size);
161 161 }
162 162  
163 163 /// @brief Sets the maximum number oftop-level objects allowed in a container while parsing.
... ... @@ -169,9 +169,9 @@ namespace qpdf::global
169 169 /// parsing objects to set.
170 170 ///
171 171 /// @since 12.3
172   - void inline objects_max_container_size(uint32_t value)
  172 + void inline parser_max_container_size(uint32_t value)
173 173 {
174   - set_uint32(qpdf_p_objects_max_container_size, value);
  174 + set_uint32(qpdf_p_parser_max_container_size, value);
175 175 }
176 176  
177 177 /// @brief Retrieves the maximum number of top-level objects allowed in a container while
... ... @@ -185,9 +185,9 @@ namespace qpdf::global
185 185 /// objects.
186 186 ///
187 187 /// @since 12.3
188   - uint32_t inline objects_max_container_size_damaged()
  188 + uint32_t inline parser_max_container_size_damaged()
189 189 {
190   - return get_uint32(qpdf_p_objects_max_container_size_damaged);
  190 + return get_uint32(qpdf_p_parser_max_container_size_damaged);
191 191 }
192 192  
193 193 /// @brief Sets the maximum number of top-level objects allowed in a container while
... ... @@ -201,9 +201,9 @@ namespace qpdf::global
201 201 /// parsing objects to set.
202 202 ///
203 203 /// @since 12.3
204   - void inline objects_max_container_size_damaged(uint32_t value)
  204 + void inline parser_max_container_size_damaged(uint32_t value)
205 205 {
206   - set_uint32(qpdf_p_objects_max_container_size_damaged, value);
  206 + set_uint32(qpdf_p_parser_max_container_size_damaged, value);
207 207 }
208 208 } // namespace limits
209 209  
... ...
libqpdf/QPDFParser.cc
... ... @@ -15,7 +15,7 @@ using namespace qpdf;
15 15  
16 16 using ObjectPtr = std::shared_ptr<QPDFObject>;
17 17  
18   -static uint32_t const& max_nesting{global::Limits::objects_max_nesting()};
  18 +static uint32_t const& max_nesting{global::Limits::parser_max_nesting()};
19 19  
20 20 // The ParseGuard class allows QPDFParser to detect re-entrant parsing. It also provides
21 21 // special access to allow the parser to create unresolved objects and dangling references.
... ... @@ -587,7 +587,7 @@ template &lt;typename T, typename... Args&gt;
587 587 void
588 588 QPDFParser::addScalar(Args&&... args)
589 589 {
590   - auto limit = Limits::objects_max_container_size(bad_count || sanity_checks);
  590 + auto limit = Limits::parser_max_container_size(bad_count || sanity_checks);
591 591 if (frame->olist.size() > limit || frame->dict.size() > limit) {
592 592 // Stop adding scalars. We are going to abort when the close token or a bad token is
593 593 // encountered.
... ... @@ -645,7 +645,7 @@ QPDFParser::fixMissingKeys()
645 645 void
646 646 QPDFParser::check_too_many_bad_tokens()
647 647 {
648   - auto limit = Limits::objects_max_container_size(bad_count || sanity_checks);
  648 + auto limit = Limits::parser_max_container_size(bad_count || sanity_checks);
649 649 if (frame->olist.size() > limit || frame->dict.size() > limit) {
650 650 if (bad_count) {
651 651 Limits::error();
... ...
libqpdf/global.cc
... ... @@ -9,24 +9,24 @@ Limits Limits::l;
9 9 Options Options::o;
10 10  
11 11 void
12   -Limits::objects_max_container_size(bool damaged, uint32_t value)
  12 +Limits::parser_max_container_size(bool damaged, uint32_t value)
13 13 {
14 14 if (damaged) {
15   - l.objects_max_container_size_damaged_set_ = true;
16   - l.objects_max_container_size_damaged_ = value;
  15 + l.parser_max_container_size_damaged_set_ = true;
  16 + l.parser_max_container_size_damaged_ = value;
17 17 } else {
18   - l.objects_max_container_size_ = value;
  18 + l.parser_max_container_size_ = value;
19 19 }
20 20 }
21 21  
22 22 void
23 23 Limits::disable_defaults()
24 24 {
25   - if (!l.objects_max_errors_set_) {
26   - l.objects_max_errors_ = 0;
  25 + if (!l.parser_max_errors_set_) {
  26 + l.parser_max_errors_ = 0;
27 27 }
28   - if (!l.objects_max_container_size_damaged_set_) {
29   - l.objects_max_container_size_damaged_ = std::numeric_limits<uint32_t>::max();
  28 + if (!l.parser_max_container_size_damaged_set_) {
  29 + l.parser_max_container_size_damaged_ = std::numeric_limits<uint32_t>::max();
30 30 }
31 31 }
32 32  
... ... @@ -41,17 +41,17 @@ qpdf_global_get_uint32(qpdf_param_e param, uint32_t* value)
41 41 case qpdf_p_limit_errors:
42 42 *value = Limits::errors();
43 43 return qpdf_r_ok;
44   - case qpdf_p_objects_max_nesting:
45   - *value = Limits::objects_max_nesting();
  44 + case qpdf_p_parser_max_nesting:
  45 + *value = Limits::parser_max_nesting();
46 46 return qpdf_r_ok;
47   - case qpdf_p_objects_max_errors:
48   - *value = Limits::objects_max_errors();
  47 + case qpdf_p_parser_max_errors:
  48 + *value = Limits::parser_max_errors();
49 49 return qpdf_r_ok;
50   - case qpdf_p_objects_max_container_size:
51   - *value = Limits::objects_max_container_size(false);
  50 + case qpdf_p_parser_max_container_size:
  51 + *value = Limits::parser_max_container_size(false);
52 52 return qpdf_r_ok;
53   - case qpdf_p_objects_max_container_size_damaged:
54   - *value = Limits::objects_max_container_size(true);
  53 + case qpdf_p_parser_max_container_size_damaged:
  54 + *value = Limits::parser_max_container_size(true);
55 55 return qpdf_r_ok;
56 56 default:
57 57 return qpdf_r_bad_parameter;
... ... @@ -65,17 +65,17 @@ qpdf_global_set_uint32(qpdf_param_e param, uint32_t value)
65 65 case qpdf_p_default_limits:
66 66 Options::default_limits(value);
67 67 return qpdf_r_ok;
68   - case qpdf_p_objects_max_nesting:
69   - Limits::objects_max_nesting(value);
  68 + case qpdf_p_parser_max_nesting:
  69 + Limits::parser_max_nesting(value);
70 70 return qpdf_r_ok;
71   - case qpdf_p_objects_max_errors:
72   - Limits::objects_max_errors(value);
  71 + case qpdf_p_parser_max_errors:
  72 + Limits::parser_max_errors(value);
73 73 return qpdf_r_ok;
74   - case qpdf_p_objects_max_container_size:
75   - Limits::objects_max_container_size(false, value);
  74 + case qpdf_p_parser_max_container_size:
  75 + Limits::parser_max_container_size(false, value);
76 76 return qpdf_r_ok;
77   - case qpdf_p_objects_max_container_size_damaged:
78   - Limits::objects_max_container_size(true, value);
  77 + case qpdf_p_parser_max_container_size_damaged:
  78 + Limits::parser_max_container_size(true, value);
79 79 return qpdf_r_ok;
80 80 default:
81 81 return qpdf_r_bad_parameter;
... ...
libqpdf/qpdf/QPDFParser.hh
... ... @@ -149,7 +149,7 @@ class QPDFParser
149 149 // it only gets incremented or reset when a bad token is encountered.
150 150 int bad_count{0};
151 151 // Number of bad tokens (remaining) before giving up.
152   - uint32_t max_bad_count{Limits::objects_max_errors()};
  152 + uint32_t max_bad_count{Limits::parser_max_errors()};
153 153 // Number of good tokens since last bad token. Irrelevant if bad_count == 0.
154 154 int good_count{0};
155 155 // Start offset including any leading whitespace.
... ...
libqpdf/qpdf/global_private.hh
... ... @@ -16,37 +16,37 @@ namespace qpdf::global
16 16 Limits& operator=(Limits&&) = delete;
17 17  
18 18 static uint32_t const&
19   - objects_max_nesting()
  19 + parser_max_nesting()
20 20 {
21   - return l.objects_max_nesting_;
  21 + return l.parser_max_nesting_;
22 22 }
23 23  
24 24 static void
25   - objects_max_nesting(uint32_t value)
  25 + parser_max_nesting(uint32_t value)
26 26 {
27   - l.objects_max_nesting_ = value;
  27 + l.parser_max_nesting_ = value;
28 28 }
29 29  
30 30 static uint32_t const&
31   - objects_max_errors()
  31 + parser_max_errors()
32 32 {
33   - return l.objects_max_errors_;
  33 + return l.parser_max_errors_;
34 34 }
35 35  
36 36 static void
37   - objects_max_errors(uint32_t value)
  37 + parser_max_errors(uint32_t value)
38 38 {
39   - l.objects_max_errors_set_ = true;
40   - l.objects_max_errors_ = value;
  39 + l.parser_max_errors_set_ = true;
  40 + l.parser_max_errors_ = value;
41 41 }
42 42  
43 43 static uint32_t const&
44   - objects_max_container_size(bool damaged)
  44 + parser_max_container_size(bool damaged)
45 45 {
46   - return damaged ? l.objects_max_container_size_damaged_ : l.objects_max_container_size_;
  46 + return damaged ? l.parser_max_container_size_damaged_ : l.parser_max_container_size_;
47 47 }
48 48  
49   - static void objects_max_container_size(bool damaged, uint32_t value);
  49 + static void parser_max_container_size(bool damaged, uint32_t value);
50 50  
51 51 /// Record a limit error.
52 52 static void
... ... @@ -73,12 +73,12 @@ namespace qpdf::global
73 73  
74 74 uint32_t errors_{0};
75 75  
76   - uint32_t objects_max_nesting_{499};
77   - uint32_t objects_max_errors_{15};
78   - bool objects_max_errors_set_{false};
79   - uint32_t objects_max_container_size_{std::numeric_limits<uint32_t>::max()};
80   - uint32_t objects_max_container_size_damaged_{5'000};
81   - bool objects_max_container_size_damaged_set_{false};
  76 + uint32_t parser_max_nesting_{499};
  77 + uint32_t parser_max_errors_{15};
  78 + bool parser_max_errors_set_{false};
  79 + uint32_t parser_max_container_size_{std::numeric_limits<uint32_t>::max()};
  80 + uint32_t parser_max_container_size_damaged_{5'000};
  81 + bool parser_max_container_size_damaged_set_{false};
82 82 };
83 83  
84 84 class Options
... ...
libtests/objects.cc
... ... @@ -162,18 +162,18 @@ test_2(QPDF&amp; pdf, char const* arg2)
162 162 using namespace qpdf::global::limits;
163 163  
164 164 // Check default values
165   - assert(objects_max_nesting() == 499);
166   - assert(objects_max_errors() == 15);
167   - assert(objects_max_container_size() == std::numeric_limits<uint32_t>::max());
168   - assert(objects_max_container_size_damaged() == 5'000);
  165 + assert(parser_max_nesting() == 499);
  166 + assert(parser_max_errors() == 15);
  167 + assert(parser_max_container_size() == std::numeric_limits<uint32_t>::max());
  168 + assert(parser_max_container_size_damaged() == 5'000);
169 169 assert(default_limits());
170 170  
171 171 // Test disabling optional default limits
172 172 default_limits(false);
173   - assert(objects_max_nesting() == 499);
174   - assert(objects_max_errors() == 0);
175   - assert(objects_max_container_size() == std::numeric_limits<uint32_t>::max());
176   - assert(objects_max_container_size_damaged() == std::numeric_limits<uint32_t>::max());
  173 + assert(parser_max_nesting() == 499);
  174 + assert(parser_max_errors() == 0);
  175 + assert(parser_max_container_size() == std::numeric_limits<uint32_t>::max());
  176 + assert(parser_max_container_size_damaged() == std::numeric_limits<uint32_t>::max());
177 177 assert(!default_limits());
178 178  
179 179 // Check disabling default limits is irreversible
... ... @@ -181,22 +181,22 @@ test_2(QPDF&amp; pdf, char const* arg2)
181 181 assert(!default_limits());
182 182  
183 183 // Test setting limits
184   - objects_max_nesting(11);
185   - objects_max_errors(12);
186   - objects_max_container_size(13);
187   - objects_max_container_size_damaged(14);
  184 + parser_max_nesting(11);
  185 + parser_max_errors(12);
  186 + parser_max_container_size(13);
  187 + parser_max_container_size_damaged(14);
188 188  
189   - assert(objects_max_nesting() == 11);
190   - assert(objects_max_errors() == 12);
191   - assert(objects_max_container_size() == 13);
192   - assert(objects_max_container_size_damaged() == 14);
  189 + assert(parser_max_nesting() == 11);
  190 + assert(parser_max_errors() == 12);
  191 + assert(parser_max_container_size() == 13);
  192 + assert(parser_max_container_size_damaged() == 14);
193 193  
194 194 // Check disabling default limits does not override explicit limits
195 195 default_limits(false);
196   - assert(objects_max_nesting() == 11);
197   - assert(objects_max_errors() == 12);
198   - assert(objects_max_container_size() == 13);
199   - assert(objects_max_container_size_damaged() == 14);
  196 + assert(parser_max_nesting() == 11);
  197 + assert(parser_max_errors() == 12);
  198 + assert(parser_max_container_size() == 13);
  199 + assert(parser_max_container_size_damaged() == 14);
200 200  
201 201 // Test parameter checking
202 202 QUtil::handle_result_code(qpdf_r_ok, "");
... ... @@ -226,7 +226,7 @@ test_2(QPDF&amp; pdf, char const* arg2)
226 226 assert(qpdf::global::limit_errors() == 0);
227 227 QPDFObjectHandle::parse("[[[[]]]]");
228 228 assert(qpdf::global::limit_errors() == 0);
229   - objects_max_nesting(3);
  229 + parser_max_nesting(3);
230 230 try {
231 231 QPDFObjectHandle::parse("[[[[[]]]]]");
232 232 } catch (std::exception&) {
... ...