libddwaf 1.0.14.2.1.beta1-x86_64-linux → 1.3.0.1.0.beta1-x86_64-linux

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cbbad6a0fc8e957d7110a4b66d42d64e7dd3aade7116b442c38b8bf270b54c86
4
- data.tar.gz: '0181b7399b0a59a4e14e455ad2737c8ec15820c7365913fae22e34679a5bfc22'
3
+ metadata.gz: 455c3b407e1d128e7ac7079fc8a115b244e345e2dfaff8ef028bd815fc96ee9f
4
+ data.tar.gz: 7866484c0ebe431a5d132cbb13d405c9d07fdf740e727bf3baf4800b46b1c43e
5
5
  SHA512:
6
- metadata.gz: 493dec85beac29a1dbb4c0319177b09839248896d4f91f3478013031082858c6ea33aa9df5e6da3f5aa4ac2b822ed0168690c82b27076d27179ed9afa0559391
7
- data.tar.gz: d89ee2e9c995ee60c4f52563c95dc313be90cd271f86efe4b614213829e65ea2d7e874e1a1b235f7fc6ac6df0503ade24ac5ed9d32cfcc307de341d67321bacc
6
+ metadata.gz: 76f413e1b71d4b4c49d1b16d6903a61eba7df7bec601a0dc1f75ba20d06e2d2c9a8dd24f73d0d8f7fe8139ad29b155aecfcf22f223e76713e1d98bd2e663ec9a
7
+ data.tar.gz: fe8bbb720edcd57a3212d5052d7c64f28a69982620c941ba23938b8615c433f4912d052e259d39477b50a720406bf7d87a55e78ee8565db5f1f1dd76c4c2b048
@@ -2,8 +2,8 @@ module Datadog
2
2
  module AppSec
3
3
  module WAF
4
4
  module VERSION
5
- BASE_STRING = '1.0.14'
6
- STRING = "#{BASE_STRING}.2.1.beta1"
5
+ BASE_STRING = '1.3.0'
6
+ STRING = "#{BASE_STRING}.1.0.beta1"
7
7
  MINIMUM_RUBY_VERSION = '2.1'
8
8
  end
9
9
  end
@@ -6,7 +6,13 @@ module Datadog
6
6
  module AppSec
7
7
  module WAF
8
8
  module LibDDWAF
9
- class Error < StandardError; end
9
+ class Error < StandardError
10
+ attr_reader :ruleset_info
11
+
12
+ def initialize(msg, ruleset_info: nil)
13
+ @ruleset_info = ruleset_info
14
+ end
15
+ end
10
16
 
11
17
  extend ::FFI::Library
12
18
 
@@ -73,6 +79,25 @@ module Datadog
73
79
  :ddwaf_obj_map, 1 << 4
74
80
 
75
81
  typedef :pointer, :charptr
82
+ typedef :pointer, :charptrptr
83
+
84
+ class UInt32Ptr < ::FFI::Struct
85
+ layout :value, :uint32
86
+ end
87
+
88
+ typedef UInt32Ptr.by_ref, :uint32ptr
89
+
90
+ class UInt64Ptr < ::FFI::Struct
91
+ layout :value, :uint64
92
+ end
93
+
94
+ typedef UInt64Ptr.by_ref, :uint64ptr
95
+
96
+ class SizeTPtr < ::FFI::Struct
97
+ layout :value, :size_t
98
+ end
99
+
100
+ typedef SizeTPtr.by_ref, :sizeptr
76
101
 
77
102
  class ObjectValueUnion < ::FFI::Union
78
103
  layout :stringValue, :charptr,
@@ -91,6 +116,8 @@ module Datadog
91
116
 
92
117
  typedef Object.by_ref, :ddwaf_object
93
118
 
119
+ ## setters
120
+
94
121
  attach_function :ddwaf_object_invalid, [:ddwaf_object], :ddwaf_object
95
122
  attach_function :ddwaf_object_string, [:ddwaf_object, :string], :ddwaf_object
96
123
  attach_function :ddwaf_object_stringl, [:ddwaf_object, :charptr, :size_t], :ddwaf_object
@@ -108,6 +135,19 @@ module Datadog
108
135
  attach_function :ddwaf_object_map_addl, [:ddwaf_object, :charptr, :size_t, :pointer], :bool
109
136
  attach_function :ddwaf_object_map_addl_nc, [:ddwaf_object, :charptr, :size_t, :pointer], :bool
110
137
 
138
+ ## getters
139
+
140
+ attach_function :ddwaf_object_type, [:ddwaf_object], DDWAF_OBJ_TYPE
141
+ attach_function :ddwaf_object_size, [:ddwaf_object], :uint64
142
+ attach_function :ddwaf_object_length, [:ddwaf_object], :size_t
143
+ attach_function :ddwaf_object_get_key, [:ddwaf_object, :sizeptr], :charptr
144
+ attach_function :ddwaf_object_get_string, [:ddwaf_object, :sizeptr], :charptr
145
+ attach_function :ddwaf_object_get_unsigned, [:ddwaf_object], :uint64
146
+ attach_function :ddwaf_object_get_signed, [:ddwaf_object], :int64
147
+ attach_function :ddwaf_object_get_index, [:ddwaf_object, :size_t], :ddwaf_object
148
+
149
+ ## freeers
150
+
111
151
  ObjectFree = attach_function :ddwaf_object_free, [:ddwaf_object], :void
112
152
  ObjectNoFree = ::FFI::Pointer::NULL
113
153
 
@@ -117,17 +157,39 @@ module Datadog
117
157
  typedef Object.by_ref, :ddwaf_rule
118
158
 
119
159
  class Config < ::FFI::Struct
120
- layout :maxArrayLength, :uint64,
121
- :maxMapDepth, :uint64,
122
- :maxTimeStore, :uint64
160
+ class Limits < ::FFI::Struct
161
+ layout :max_container_size, :uint32,
162
+ :max_container_depth, :uint32,
163
+ :max_string_length, :uint32
164
+ end
165
+
166
+ class Obfuscator < ::FFI::Struct
167
+ layout :key_regex, :pointer, # :charptr
168
+ :value_regex, :pointer # :charptr
169
+ end
170
+
171
+ layout :limits, Limits,
172
+ :obfuscator, Obfuscator
123
173
  end
124
174
 
125
175
  typedef Config.by_ref, :ddwaf_config
126
176
 
127
- attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config], :ddwaf_handle
177
+ class RuleSetInfo < ::FFI::Struct
178
+ layout :loaded, :uint16,
179
+ :failed, :uint16,
180
+ :errors, Object,
181
+ :version, :string
182
+ end
183
+
184
+ typedef RuleSetInfo.by_ref, :ddwaf_ruleset_info
185
+ RuleSetInfoNone = Datadog::AppSec::WAF::LibDDWAF::RuleSetInfo.new(::FFI::Pointer::NULL)
186
+
187
+ attach_function :ddwaf_ruleset_info_free, [:ddwaf_ruleset_info], :void
188
+
189
+ attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config, :ddwaf_ruleset_info], :ddwaf_handle
128
190
  attach_function :ddwaf_destroy, [:ddwaf_handle], :void
129
191
 
130
- attach_function :ddwaf_required_addresses, [:ddwaf_handle, :pointer], :pointer
192
+ attach_function :ddwaf_required_addresses, [:ddwaf_handle, UInt32Ptr], :charptrptr
131
193
 
132
194
  # running
133
195
 
@@ -138,19 +200,17 @@ module Datadog
138
200
  attach_function :ddwaf_context_init, [:ddwaf_handle, :ddwaf_object_free_fn], :ddwaf_context
139
201
  attach_function :ddwaf_context_destroy, [:ddwaf_context], :void
140
202
 
141
- DDWAF_RET_CODE = enum :ddwaf_err_internal, -4,
142
- :ddwaf_err_invalid_object, -3,
143
- :ddwaf_err_invalid_argument, -2,
144
- :ddwaf_err_timeout, -1,
203
+ DDWAF_RET_CODE = enum :ddwaf_err_internal, -3,
204
+ :ddwaf_err_invalid_object, -2,
205
+ :ddwaf_err_invalid_argument, -1,
145
206
  :ddwaf_good, 0,
146
207
  :ddwaf_monitor, 1,
147
208
  :ddwaf_block, 2
148
209
 
149
210
  class Result < ::FFI::Struct
150
- layout :action, DDWAF_RET_CODE,
211
+ layout :timeout, :bool,
151
212
  :data, :string,
152
- :perfData, :string,
153
- :perfTotalRuntime, :uint32 # in us
213
+ :total_runtime, :uint64
154
214
  end
155
215
 
156
216
  typedef Result.by_ref, :ddwaf_result
@@ -287,7 +347,7 @@ module Datadog
287
347
 
288
348
  def self.logger=(logger)
289
349
  @log_cb = proc do |level, func, file, line, message, len|
290
- logger.debug { { level: level, func: func, file: file, message: message.read_bytes(len) }.inspect }
350
+ logger.debug { { level: level, func: func, file: file, line: line, message: message.read_bytes(len) }.inspect }
291
351
  end
292
352
 
293
353
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_set_log_cb(@log_cb, :ddwaf_log_trace)
@@ -296,11 +356,13 @@ module Datadog
296
356
  class Handle
297
357
  attr_reader :handle_obj
298
358
 
299
- DEFAULT_MAX_ARRAY_LENGTH = 0
300
- DEFAULT_MAX_MAP_DEPTH = 0
301
- DEFAULT_MAX_TIME_STORE = 0
359
+ DEFAULT_MAX_CONTAINER_SIZE = 0
360
+ DEFAULT_MAX_CONTAINER_DEPTH = 0
361
+ DEFAULT_MAX_STRING_LENGTH = 0
302
362
 
303
- def initialize(rule, config = {})
363
+ attr_reader :ruleset_info
364
+
365
+ def initialize(rule, limits: {}, obfuscator: {})
304
366
  rule_obj = Datadog::AppSec::WAF.ruby_to_object(rule)
305
367
  if rule_obj.null? || rule_obj[:type] == :ddwaf_object_invalid
306
368
  fail LibDDWAF::Error, "Could not convert object #{rule.inspect}"
@@ -311,17 +373,30 @@ module Datadog
311
373
  fail LibDDWAF::Error, 'Could not create config struct'
312
374
  end
313
375
 
314
- config_obj[:maxArrayLength] = config[:max_array_length] || DEFAULT_MAX_ARRAY_LENGTH
315
- config_obj[:maxMapDepth] = config[:max_map_depth] || DEFAULT_MAX_MAP_DEPTH
316
- config_obj[:maxTimeStore] = config[:max_time_store] || DEFAULT_MAX_TIME_STORE
376
+ config_obj[:limits][:max_container_size] = limits[:max_container_size] || DEFAULT_MAX_CONTAINER_SIZE
377
+ config_obj[:limits][:max_container_depth] = limits[:max_container_depth] || DEFAULT_MAX_CONTAINER_DEPTH
378
+ config_obj[:limits][:max_string_length] = limits[:max_string_length] || DEFAULT_MAX_STRING_LENGTH
379
+ config_obj[:obfuscator][:key_regex] = FFI::MemoryPointer.from_string(obfuscator[:key_regex]) if obfuscator[:key_regex]
380
+ config_obj[:obfuscator][:value_regex] = FFI::MemoryPointer.from_string(obfuscator[:value_regex]) if obfuscator[:value_regex]
381
+
382
+ ruleset_info = LibDDWAF::RuleSetInfo.new
383
+
384
+ @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj, ruleset_info)
385
+
386
+ @ruleset_info = {
387
+ loaded: ruleset_info[:loaded],
388
+ failed: ruleset_info[:failed],
389
+ errors: WAF.object_to_ruby(ruleset_info[:errors]),
390
+ version: ruleset_info[:version],
391
+ }
317
392
 
318
- @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj)
319
393
  if @handle_obj.null?
320
- fail LibDDWAF::Error, 'Could not create handle'
394
+ fail LibDDWAF::Error.new('Could not create handle', ruleset_info: @ruleset_info)
321
395
  end
322
396
 
323
397
  ObjectSpace.define_finalizer(self, Handle.finalizer(handle_obj))
324
398
  ensure
399
+ Datadog::AppSec::WAF::LibDDWAF.ddwaf_ruleset_info_free(ruleset_info) if ruleset_info
325
400
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(rule_obj) if rule_obj
326
401
  end
327
402
 
@@ -330,9 +405,18 @@ module Datadog
330
405
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_destroy(handle_obj)
331
406
  end
332
407
  end
408
+
409
+ def required_addresses
410
+ count = Datadog::AppSec::WAF::LibDDWAF::UInt32Ptr.new
411
+ list = Datadog::AppSec::WAF::LibDDWAF.ddwaf_required_addresses(handle_obj, count)
412
+
413
+ return [] if count == 0 # list is null
414
+
415
+ list.get_array_of_string(0, count[:value])
416
+ end
333
417
  end
334
418
 
335
- Result = Struct.new(:action, :data, :perf_data, :perf_total_runtime)
419
+ Result = Struct.new(:action, :data, :total_runtime, :timeout)
336
420
 
337
421
  class Context
338
422
  attr_reader :context_obj
@@ -365,7 +449,6 @@ module Datadog
365
449
  ddwaf_err_internal: :err_internal,
366
450
  ddwaf_err_invalid_object: :err_invalid_object,
367
451
  ddwaf_err_invalid_argument: :err_invalid_argument,
368
- ddwaf_err_timeout: :err_timeout,
369
452
  ddwaf_good: :good,
370
453
  ddwaf_monitor: :monitor,
371
454
  ddwaf_block: :block,
@@ -388,10 +471,10 @@ module Datadog
388
471
  code = Datadog::AppSec::WAF::LibDDWAF.ddwaf_run(@context_obj, input_obj, result_obj, timeout)
389
472
 
390
473
  result = Result.new(
391
- ACTION_MAP_OUT[result_obj[:action]],
474
+ ACTION_MAP_OUT[code],
392
475
  (JSON.parse(result_obj[:data]) if result_obj[:data] != nil),
393
- (JSON.parse(result_obj[:perfData]) if result_obj[:perfData] != nil),
394
- result_obj[:perfTotalRuntime],
476
+ result_obj[:total_runtime],
477
+ result_obj[:timeout],
395
478
  )
396
479
 
397
480
  [ACTION_MAP_OUT[code], result]
@@ -17,8 +17,8 @@ extern "C"
17
17
  #include <stddef.h>
18
18
 
19
19
  #define DDWAF_MAX_STRING_LENGTH 4096
20
- #define DDWAF_MAX_MAP_DEPTH 20
21
- #define DDWAF_MAX_ARRAY_LENGTH 256
20
+ #define DDWAF_MAX_CONTAINER_DEPTH 20
21
+ #define DDWAF_MAX_CONTAINER_SIZE 256
22
22
  #define DDWAF_RUN_TIMEOUT 5000
23
23
 
24
24
  /**
@@ -48,10 +48,9 @@ typedef enum
48
48
  **/
49
49
  typedef enum
50
50
  {
51
- DDWAF_ERR_INTERNAL = -4,
52
- DDWAF_ERR_INVALID_OBJECT = -3,
53
- DDWAF_ERR_INVALID_ARGUMENT = -2,
54
- DDWAF_ERR_TIMEOUT = -1,
51
+ DDWAF_ERR_INTERNAL = -3,
52
+ DDWAF_ERR_INVALID_OBJECT = -2,
53
+ DDWAF_ERR_INVALID_ARGUMENT = -1,
55
54
  DDWAF_GOOD = 0,
56
55
  DDWAF_MONITOR = 1,
57
56
  DDWAF_BLOCK = 2
@@ -72,13 +71,21 @@ typedef enum
72
71
  DDWAF_LOG_OFF,
73
72
  } DDWAF_LOG_LEVEL;
74
73
 
74
+ #ifdef __cplusplus
75
+ class PowerWAF;
76
+ class PWAdditive;
77
+ using ddwaf_handle = PowerWAF *;
78
+ using ddwaf_context = PWAdditive *;
79
+ #else
75
80
  typedef struct _ddwaf_handle* ddwaf_handle;
76
81
  typedef struct _ddwaf_context* ddwaf_context;
82
+ #endif
83
+
77
84
  typedef struct _ddwaf_object ddwaf_object;
78
85
  typedef struct _ddwaf_config ddwaf_config;
79
86
  typedef struct _ddwaf_result ddwaf_result;
80
87
  typedef struct _ddwaf_version ddwaf_version;
81
-
88
+ typedef struct _ddwaf_ruleset_info ddwaf_ruleset_info;
82
89
  /**
83
90
  * @struct ddwaf_object
84
91
  *
@@ -94,7 +101,7 @@ struct _ddwaf_object
94
101
  const char* stringValue;
95
102
  uint64_t uintValue;
96
103
  int64_t intValue;
97
- const ddwaf_object* array;
104
+ ddwaf_object* array;
98
105
  };
99
106
  uint64_t nbEntries;
100
107
  DDWAF_OBJ_TYPE type;
@@ -107,12 +114,22 @@ struct _ddwaf_object
107
114
  **/
108
115
  struct _ddwaf_config
109
116
  {
110
- /** Maximum length of ddwaf::object arrays. */
111
- uint64_t maxArrayLength;
112
- /** Maximum depth of ddwaf::object maps. */
113
- uint64_t maxMapDepth;
114
- /** Maximum size of the rule run time store. **/
115
- int32_t maxTimeStore;
117
+ struct {
118
+ /** Maximum size of ddwaf::object containers. */
119
+ uint32_t max_container_size;
120
+ /** Maximum depth of ddwaf::object containers. */
121
+ uint32_t max_container_depth;
122
+ /** Maximum length of ddwaf::object strings. */
123
+ uint32_t max_string_length;
124
+ } limits;
125
+
126
+ /** Obfuscator regexes - the strings are owned by the caller */
127
+ struct {
128
+ /** Regular expression for key-based obfuscation */
129
+ const char *key_regex;
130
+ /** Regular expression for value-based obfuscation */
131
+ const char *value_regex;
132
+ } obfuscator;
116
133
  };
117
134
 
118
135
  /**
@@ -122,14 +139,12 @@ struct _ddwaf_config
122
139
  **/
123
140
  struct _ddwaf_result
124
141
  {
125
- /** Run result action **/
126
- DDWAF_RET_CODE action;
142
+ /** Whether there has been a timeout during the operation **/
143
+ bool timeout;
127
144
  /** Run result in JSON format **/
128
145
  const char* data;
129
- /** Performance data in JSON format **/
130
- const char* perfData;
131
- /** Total run time in microseconds **/
132
- uint32_t perfTotalRuntime;
146
+ /** Total WAF runtime in nanoseconds **/
147
+ uint64_t total_runtime;
133
148
  };
134
149
 
135
150
  /**
@@ -144,6 +159,24 @@ struct _ddwaf_version
144
159
  uint16_t patch;
145
160
  };
146
161
 
162
+ /**
163
+ * @ddwaf_ruleset_info
164
+ *
165
+ * Structure containing diagnostics on the provided ruleset.
166
+ * */
167
+ struct _ddwaf_ruleset_info
168
+ {
169
+ /** Number of rules successfully loaded **/
170
+ uint16_t loaded;
171
+ /** Number of rules which failed to parse **/
172
+ uint16_t failed;
173
+ /** Map from an error string to an array of all the rule ids for which
174
+ * that error was raised. {error: [rule_ids]} **/
175
+ ddwaf_object errors;
176
+ /** Ruleset version **/
177
+ const char *version;
178
+ };
179
+
147
180
  /**
148
181
  * @typedef ddwaf_object_free_fn
149
182
  *
@@ -174,10 +207,12 @@ typedef void (*ddwaf_log_cb)(
174
207
  *
175
208
  * @param rule ddwaf::object containing the patterns to be used by the WAF. (nonnull)
176
209
  * @param config Optional configuration of the WAF. (nullable)
210
+ * @param info Optional ruleset parsing diagnostics. (nullable)
177
211
  *
178
212
  * @return Handle to the WAF instance.
179
213
  **/
180
- ddwaf_handle ddwaf_init(const ddwaf_object *rule, const ddwaf_config* config);
214
+ ddwaf_handle ddwaf_init(const ddwaf_object *rule,
215
+ const ddwaf_config* config, ddwaf_ruleset_info *info);
181
216
 
182
217
  /**
183
218
  * ddwaf_destroy
@@ -187,7 +222,14 @@ ddwaf_handle ddwaf_init(const ddwaf_object *rule, const ddwaf_config* config);
187
222
  * @param Handle to the WAF instance.
188
223
  */
189
224
  void ddwaf_destroy(ddwaf_handle handle);
190
-
225
+ /**
226
+ * ddwaf_ruleset_info_free
227
+ *
228
+ * Free the memory associated with the ruleset info structure.
229
+ *
230
+ * @param info Ruleset info to free.
231
+ * */
232
+ void ddwaf_ruleset_info_free(ddwaf_ruleset_info *info);
191
233
  /**
192
234
  * ddwaf_required_addresses
193
235
  *
@@ -248,7 +290,8 @@ ddwaf_context ddwaf_context_init(const ddwaf_handle handle, ddwaf_object_free_fn
248
290
  * data is unknown. The result structure will not be
249
291
  * filled if this error occurs.
250
292
  **/
251
- DDWAF_RET_CODE ddwaf_run(ddwaf_context context, ddwaf_object *data, ddwaf_result *result, uint64_t timeout);
293
+ DDWAF_RET_CODE ddwaf_run(ddwaf_context context, ddwaf_object *data,
294
+ ddwaf_result *result, uint64_t timeout);
252
295
 
253
296
  /**
254
297
  * ddwaf_context_destroy
@@ -451,6 +494,101 @@ bool ddwaf_object_map_addl(ddwaf_object *map, const char *key, size_t length, dd
451
494
  **/
452
495
  bool ddwaf_object_map_addl_nc(ddwaf_object *map, const char *key, size_t length, ddwaf_object *object);
453
496
 
497
+ /**
498
+ * ddwaf_object_type
499
+ *
500
+ * Returns the type of the object.
501
+ *
502
+ * @param object The object from which to get the type.
503
+ *
504
+ * @return The object type of DDWAF_OBJ_INVALID if NULL.
505
+ **/
506
+ DDWAF_OBJ_TYPE ddwaf_object_type(ddwaf_object *object);
507
+
508
+ /**
509
+ * ddwaf_object_size
510
+ *
511
+ * Returns the size of the container object.
512
+ *
513
+ * @param object The object from which to get the size.
514
+ *
515
+ * @return The object size or 0 if the object is not a container (array, map).
516
+ **/
517
+ size_t ddwaf_object_size(ddwaf_object *object);
518
+
519
+ /**
520
+ * ddwaf_object_length
521
+ *
522
+ * Returns the length of the string object.
523
+ *
524
+ * @param object The object from which to get the length.
525
+ *
526
+ * @return The string length or 0 if the object is not a string.
527
+ **/
528
+ size_t ddwaf_object_length(ddwaf_object *object);
529
+
530
+ /**
531
+ * ddwaf_object_get_key
532
+ *
533
+ * Returns the key contained within the object.
534
+ *
535
+ * @param object The object from which to get the key.
536
+ * @param length Output parameter on which to return the length of the key,
537
+ * this parameter is optional / nullable.
538
+ *
539
+ * @return The key of the object or NULL if the object doesn't contain a key.
540
+ **/
541
+ const char* ddwaf_object_get_key(ddwaf_object *object, size_t *length);
542
+
543
+ /**
544
+ * ddwaf_object_get_string
545
+ *
546
+ * Returns the string contained within the object.
547
+ *
548
+ * @param object The object from which to get the string.
549
+ * @param length Output parameter on which to return the length of the string,
550
+ * this parameter is optional / nullable.
551
+ *
552
+ * @return The string of the object or NULL if the object is not a string.
553
+ **/
554
+ const char* ddwaf_object_get_string(ddwaf_object *object, size_t *length);
555
+
556
+ /**
557
+ * ddwaf_object_get_unsigned
558
+ *
559
+ * Returns the uint64 contained within the object.
560
+ *
561
+ * @param object The object from which to get the integer.
562
+ *
563
+ * @return The integer or 0 if the object is not an unsigned.
564
+ **/
565
+ uint64_t ddwaf_object_get_unsigned(ddwaf_object *object);
566
+
567
+ /**
568
+ * ddwaf_object_get_signed
569
+ *
570
+ * Returns the int64 contained within the object.
571
+ *
572
+ * @param object The object from which to get the integer.
573
+ *
574
+ * @return The integer or 0 if the object is not a signed.
575
+ **/
576
+ int64_t ddwaf_object_get_signed(ddwaf_object *object);
577
+
578
+ /**
579
+ * ddwaf_object_get_index
580
+ *
581
+ * Returns the object contained in the container at the given index.
582
+ *
583
+ * @param object The container from which to extract the object.
584
+ * @param index The position of the required object within the container.
585
+ *
586
+ * @return The requested object or NULL if the index is out of bounds or the
587
+ * object is not a container.
588
+ **/
589
+ ddwaf_object* ddwaf_object_get_index(ddwaf_object *object, size_t index);
590
+
591
+
454
592
  /**
455
593
  * ddwaf_object_free
456
594
  *
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libddwaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.14.2.1.beta1
4
+ version: 1.3.0.1.0.beta1
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-03 00:00:00.000000000 Z
11
+ date: 2022-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -41,8 +41,8 @@ files:
41
41
  - lib/datadog/appsec/waf.rb
42
42
  - lib/datadog/appsec/waf/version.rb
43
43
  - lib/libddwaf.rb
44
- - vendor/libddwaf/libddwaf-1.0.14-linux-x86_64/include/ddwaf.h
45
- - vendor/libddwaf/libddwaf-1.0.14-linux-x86_64/lib/libddwaf.so
44
+ - vendor/libddwaf/libddwaf-1.3.0-linux-x86_64/include/ddwaf.h
45
+ - vendor/libddwaf/libddwaf-1.3.0-linux-x86_64/lib/libddwaf.so
46
46
  homepage: https://github.com/DataDog/libddwaf
47
47
  licenses:
48
48
  - BSD-3-Clause