File tree 1 file changed +18
-1
lines changed
1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change 22
22
23
23
#include <mpack/mpack.h>
24
24
25
+ #define CFL_VARIANT_UTILS_MAXIMUM_FIXED_ARRAY_SIZE 100
26
+ #define CFL_VARIANT_UTILS_INITIAL_ARRAY_SIZE 100
27
+ #define CFL_VARIANT_UTILS_SERIALIZED_ARRAY_SIZE_LIMIT 100000
28
+
25
29
/* These are the only functions meant for general use,
26
30
* the reason why the kvlist packing and unpacking
27
31
* functions are exposed is the internal and external
@@ -226,12 +230,25 @@ static inline int unpack_cfl_array(mpack_reader_t *reader,
226
230
227
231
entry_count = mpack_tag_array_count (& tag );
228
232
229
- internal_array = cfl_array_create (entry_count );
233
+ if (entry_count >= CFL_VARIANT_UTILS_SERIALIZED_ARRAY_SIZE_LIMIT ) {
234
+ return -2 ;
235
+ }
236
+
237
+ if (entry_count >= CFL_VARIANT_UTILS_MAXIMUM_FIXED_ARRAY_SIZE ) {
238
+ internal_array = cfl_array_create (CFL_VARIANT_UTILS_INITIAL_ARRAY_SIZE );
239
+ }
240
+ else {
241
+ internal_array = cfl_array_create (entry_count );
242
+ }
230
243
231
244
if (internal_array == NULL ) {
232
245
return -3 ;
233
246
}
234
247
248
+ if (entry_count >= CFL_VARIANT_UTILS_MAXIMUM_FIXED_ARRAY_SIZE ) {
249
+ cfl_array_resizable (internal_array , CFL_TRUE );
250
+ }
251
+
235
252
for (index = 0 ; index < entry_count ; index ++ ) {
236
253
result = unpack_cfl_variant (reader , & entry_value );
237
254
You can’t perform that action at this time.
0 commit comments