libddwaf 1.9.0.0.1 → 1.14.0.0.0

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: bd38633600d82ecc9166a86fe314f6704d9a0e18662989811d6a4031bf313647
4
- data.tar.gz: aed657ca737793808c6400966b4a05c405ef16734e53d73e0eade264fa8d360d
3
+ metadata.gz: '058fd59aa02f0d4be3c917d5a01d68c868cb41b77c903ee28d7b2106e5945f02'
4
+ data.tar.gz: 5dcaa2c486a0de0ca591ca06775d29184b3a8d9f6da539fed1cfa583ad86db9e
5
5
  SHA512:
6
- metadata.gz: ac2c774e31e97902a60296084de6304cfd6f8528fadf1013b73c8cbed52a538e4b20082c3f2e6085f16e32ca27d71b767cb2a1e8c01207c07776d991210faddc
7
- data.tar.gz: 99446731f04d3fff037549cba900ea96eb904b3fc8f617b57c7d6b6ff8543d0d0903b3722c52df383362d972b0204b467d54e30b2a0b4e57aac30cae8d5ae7e9
6
+ metadata.gz: 0107d27ac04857784db5e789374a5b370d1afb92ec80cb31ed1289e154665c6216c20cbf7b4dc6a557db3cd14e65ebab38e4d52ed503f14b3c87d91b1869c32b
7
+ data.tar.gz: 5e7fe5e71a1a570705b5b950010e57b17c8c4bd1976fd7e97f35cc07eb7d0ac193198d52937950f88d609f4722b89551c4f79fe07dba11aaf2ef98cdbe54db07
data/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ # 2023-09-11 v.1.14.0.0.0
2
+ - Update to libddwaf 1.14.0
3
+ - Add support for `Float` and `Nil` scalar values when converting from ruby to WAF Object and vice versa.
4
+
5
+
6
+ # 2023-08-29 v.1.11.0.0.0
7
+
8
+ - Update to libddwaf 1.11.0
9
+ - Changed `Datadog::AppSec::WAF::Handle#ruleset_info` to `Datadog::AppSec::WAF::Handle#diagnostics``. (Breaking change)
10
+ The schema of the diagnostics variable can be found [here](https://github.com/DataDog/libddwaf/blob/master/schema/diagnostics.json)
11
+ - Changed `Datadog::AppSec::WAF::Result#data` to `Datadog::AppSec::WAF::Result#events`. (Breaking change)
12
+ The schema of the events variable can be found [here](https://github.com/DataDog/libddwaf/blob/master/schema/events.json)
13
+
14
+
15
+ # 2023-08-28 v.1.10.0.0.0
16
+
17
+ - Update to libddwaf 1.10.0
18
+
19
+ # 2023-06-13 v.1.9.0.0.1
20
+
21
+ - Handle invalid encoding
22
+ - Ensure strings passed to libddwaf are not clipped inside a code point
23
+ - Ensure strings passed to libddwaf are UTF-8
24
+
25
+ # 2023-05-17 v1.9.0.0.0
26
+
27
+ - Update to libddwaf 1.9.0
28
+ - Support [`custom_rules`](https://github.com/DataDog/libddwaf/pull/154)
29
+
1
30
  # 2023-03-03 v1.8.2.0.0
2
31
 
3
32
  - Update to libddwaf 1.8.2
data/Steepfile CHANGED
@@ -4,7 +4,6 @@ target :lib do
4
4
  signature "sig"
5
5
 
6
6
  check "lib"
7
- library "rubygems"
8
7
  library "logger"
9
8
  library "monitor" # needed by logger
10
9
  library "json"
@@ -2,8 +2,8 @@ module Datadog
2
2
  module AppSec
3
3
  module WAF
4
4
  module VERSION
5
- BASE_STRING = '1.9.0'
6
- STRING = "#{BASE_STRING}.0.1"
5
+ BASE_STRING = '1.14.0'
6
+ STRING = "#{BASE_STRING}.0.0"
7
7
  MINIMUM_RUBY_VERSION = '2.1'
8
8
  end
9
9
  end
@@ -8,10 +8,10 @@ module Datadog
8
8
  module WAF
9
9
  module LibDDWAF
10
10
  class Error < StandardError
11
- attr_reader :ruleset_info
11
+ attr_reader :diagnostics
12
12
 
13
- def initialize(msg, ruleset_info: nil)
14
- @ruleset_info = ruleset_info
13
+ def initialize(msg, diagnostics: nil)
14
+ @diagnostics = diagnostics
15
15
  end
16
16
  end
17
17
 
@@ -111,7 +111,10 @@ module Datadog
111
111
  :ddwaf_obj_string, 1 << 2,
112
112
  :ddwaf_obj_array, 1 << 3,
113
113
  :ddwaf_obj_map, 1 << 4,
114
- :ddwaf_obj_bool, 1 << 5
114
+ :ddwaf_obj_bool, 1 << 5,
115
+ :ddwaf_obj_float, 1 << 6,
116
+ :ddwaf_obj_null, 1 << 7
117
+
115
118
  typedef DDWAF_OBJ_TYPE, :ddwaf_obj_type
116
119
 
117
120
  typedef :pointer, :charptr
@@ -140,7 +143,8 @@ module Datadog
140
143
  :uintValue, :uint64,
141
144
  :intValue, :int64,
142
145
  :array, :pointer,
143
- :boolean, :bool
146
+ :boolean, :bool,
147
+ :f64, :double
144
148
  end
145
149
 
146
150
  class Object < ::FFI::Struct
@@ -159,11 +163,13 @@ module Datadog
159
163
  attach_function :ddwaf_object_string, [:ddwaf_object, :string], :ddwaf_object
160
164
  attach_function :ddwaf_object_stringl, [:ddwaf_object, :charptr, :size_t], :ddwaf_object
161
165
  attach_function :ddwaf_object_stringl_nc, [:ddwaf_object, :charptr, :size_t], :ddwaf_object
166
+ attach_function :ddwaf_object_string_from_unsigned, [:ddwaf_object, :uint64], :ddwaf_object
167
+ attach_function :ddwaf_object_string_from_signed, [:ddwaf_object, :int64], :ddwaf_object
162
168
  attach_function :ddwaf_object_unsigned, [:ddwaf_object, :uint64], :ddwaf_object
163
169
  attach_function :ddwaf_object_signed, [:ddwaf_object, :int64], :ddwaf_object
164
- attach_function :ddwaf_object_unsigned_force, [:ddwaf_object, :uint64], :ddwaf_object
165
- attach_function :ddwaf_object_signed_force, [:ddwaf_object, :int64], :ddwaf_object
166
170
  attach_function :ddwaf_object_bool, [:ddwaf_object, :bool], :ddwaf_object
171
+ attach_function :ddwaf_object_null, [:ddwaf_object], :ddwaf_object
172
+ attach_function :ddwaf_object_float, [:ddwaf_object, :double], :ddwaf_object
167
173
 
168
174
  attach_function :ddwaf_object_array, [:ddwaf_object], :ddwaf_object
169
175
  attach_function :ddwaf_object_array_add, [:ddwaf_object, :ddwaf_object], :bool
@@ -184,6 +190,7 @@ module Datadog
184
190
  attach_function :ddwaf_object_get_signed, [:ddwaf_object], :int64
185
191
  attach_function :ddwaf_object_get_index, [:ddwaf_object, :size_t], :ddwaf_object
186
192
  attach_function :ddwaf_object_get_bool, [:ddwaf_object], :bool
193
+ attach_function :ddwaf_object_get_float, [:ddwaf_object], :double
187
194
 
188
195
  ## freeers
189
196
 
@@ -216,20 +223,8 @@ module Datadog
216
223
 
217
224
  typedef Config.by_ref, :ddwaf_config
218
225
 
219
- class RuleSetInfo < ::FFI::Struct
220
- layout :loaded, :uint16,
221
- :failed, :uint16,
222
- :errors, Object,
223
- :version, :string
224
- end
225
-
226
- typedef RuleSetInfo.by_ref, :ddwaf_ruleset_info
227
- RuleSetInfoNone = Datadog::AppSec::WAF::LibDDWAF::RuleSetInfo.new(::FFI::Pointer::NULL)
228
-
229
- attach_function :ddwaf_ruleset_info_free, [:ddwaf_ruleset_info], :void
230
-
231
- attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config, :ddwaf_ruleset_info], :ddwaf_handle
232
- attach_function :ddwaf_update, [:ddwaf_handle, :ddwaf_object, :ddwaf_ruleset_info], :ddwaf_handle
226
+ attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config, :ddwaf_object], :ddwaf_handle
227
+ attach_function :ddwaf_update, [:ddwaf_handle, :ddwaf_object, :ddwaf_object], :ddwaf_handle
233
228
  attach_function :ddwaf_destroy, [:ddwaf_handle], :void
234
229
 
235
230
  attach_function :ddwaf_required_addresses, [:ddwaf_handle, UInt32Ptr], :charptrptr
@@ -250,16 +245,12 @@ module Datadog
250
245
  attach_function :ddwaf_context_init, [:ddwaf_handle], :ddwaf_context
251
246
  attach_function :ddwaf_context_destroy, [:ddwaf_context], :void
252
247
 
253
- class ResultActions < ::FFI::Struct
254
- layout :array, :charptrptr,
255
- :size, :uint32
256
- end
257
-
258
248
  class Result < ::FFI::Struct
259
- layout :timeout, :bool,
260
- :data, :string,
261
- :actions, ResultActions,
262
- :total_runtime, :uint64
249
+ layout :timeout, :bool,
250
+ :events, Object,
251
+ :actions, Object,
252
+ :derivatives, Object,
253
+ :total_runtime, :uint64
263
254
  end
264
255
 
265
256
  typedef Result.by_ref, :ddwaf_result
@@ -297,7 +288,7 @@ module Datadog
297
288
  LibDDWAF.ddwaf_get_version
298
289
  end
299
290
 
300
- # rubocop:disable Metrics/MethodLength
291
+ # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
301
292
  def self.ruby_to_object(val, max_container_size: nil, max_container_depth: nil, max_string_length: nil, coerce: true)
302
293
  case val
303
294
  when Array
@@ -375,9 +366,9 @@ module Datadog
375
366
  res = if coerce
376
367
  LibDDWAF.ddwaf_object_string(obj, val.to_s)
377
368
  elsif val < 0
378
- LibDDWAF.ddwaf_object_signed_force(obj, val)
369
+ LibDDWAF.ddwaf_object_signed(obj, val)
379
370
  else
380
- LibDDWAF.ddwaf_object_unsigned_force(obj, val)
371
+ LibDDWAF.ddwaf_object_unsigned(obj, val)
381
372
  end
382
373
  if res.null?
383
374
  fail LibDDWAF::Error, "Could not convert into object: #{val.inspect}"
@@ -386,7 +377,11 @@ module Datadog
386
377
  obj
387
378
  when Float
388
379
  obj = LibDDWAF::Object.new
389
- res = LibDDWAF.ddwaf_object_string(obj, val.to_s)
380
+ res = if coerce
381
+ LibDDWAF.ddwaf_object_string(obj, val.to_s)
382
+ else
383
+ LibDDWAF.ddwaf_object_float(obj, val)
384
+ end
390
385
  if res.null?
391
386
  fail LibDDWAF::Error, "Could not convert into object: #{val.inspect}"
392
387
  end
@@ -403,16 +398,28 @@ module Datadog
403
398
  fail LibDDWAF::Error, "Could not convert into object: #{val.inspect}"
404
399
  end
405
400
 
401
+ obj
402
+ when NilClass
403
+ obj = LibDDWAF::Object.new
404
+ res = if coerce
405
+ LibDDWAF.ddwaf_object_string(obj, '')
406
+ else
407
+ LibDDWAF.ddwaf_object_null(obj)
408
+ end
409
+ if res.null?
410
+ fail LibDDWAF::Error, "Could not convert into object: #{val.inspect}"
411
+ end
412
+
406
413
  obj
407
414
  else
408
415
  ruby_to_object(''.freeze)
409
416
  end
410
417
  end
411
- # rubocop:enable Metrics/MethodLength
418
+ # rubocop:enable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
412
419
 
413
420
  def self.object_to_ruby(obj)
414
421
  case obj[:type]
415
- when :ddwaf_obj_invalid
422
+ when :ddwaf_obj_invalid, :ddwaf_obj_null
416
423
  nil
417
424
  when :ddwaf_obj_bool
418
425
  obj[:valueUnion][:boolean]
@@ -422,6 +429,8 @@ module Datadog
422
429
  obj[:valueUnion][:intValue]
423
430
  when :ddwaf_obj_unsigned
424
431
  obj[:valueUnion][:uintValue]
432
+ when :ddwaf_obj_float
433
+ obj[:valueUnion][:f64]
425
434
  when :ddwaf_obj_array
426
435
  (0...obj[:nbEntries]).each.with_object([]) do |i, a|
427
436
  ptr = obj[:valueUnion][:array] + i * LibDDWAF::Object.size
@@ -479,7 +488,7 @@ module Datadog
479
488
  }
480
489
 
481
490
  class Handle
482
- attr_reader :handle_obj, :ruleset_info, :config
491
+ attr_reader :handle_obj, :diagnostics, :config
483
492
 
484
493
  def initialize(rule, limits: {}, obfuscator: {})
485
494
  rule_obj = Datadog::AppSec::WAF.ruby_to_object(rule)
@@ -501,24 +510,19 @@ module Datadog
501
510
 
502
511
  @config = config_obj
503
512
 
504
- ruleset_info = LibDDWAF::RuleSetInfo.new
513
+ diagnostics_obj = Datadog::AppSec::WAF::LibDDWAF::Object.new
505
514
 
506
- @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj, ruleset_info)
515
+ @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj, diagnostics_obj)
507
516
 
508
- @ruleset_info = {
509
- loaded: ruleset_info[:loaded],
510
- failed: ruleset_info[:failed],
511
- errors: WAF.object_to_ruby(ruleset_info[:errors]),
512
- version: ruleset_info[:version],
513
- }
517
+ @diagnostics = Datadog::AppSec::WAF.object_to_ruby(diagnostics_obj)
514
518
 
515
519
  if @handle_obj.null?
516
- fail LibDDWAF::Error.new('Could not create handle', ruleset_info: @ruleset_info)
520
+ fail LibDDWAF::Error.new('Could not create handle', diagnostics: @diagnostics)
517
521
  end
518
522
 
519
523
  validate!
520
524
  ensure
521
- Datadog::AppSec::WAF::LibDDWAF.ddwaf_ruleset_info_free(ruleset_info) if ruleset_info
525
+ Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(diagnostics_obj) if diagnostics_obj
522
526
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(rule_obj) if rule_obj
523
527
  end
524
528
 
@@ -541,29 +545,24 @@ module Datadog
541
545
 
542
546
  def merge(data)
543
547
  data_obj = Datadog::AppSec::WAF.ruby_to_object(data, coerce: false)
544
- ruleset_info = LibDDWAF::RuleSetInfo.new
545
- new_handle = Datadog::AppSec::WAF::LibDDWAF.ddwaf_update(handle_obj, data_obj, ruleset_info)
548
+ diagnostics_obj = LibDDWAF::Object.new
549
+ new_handle = Datadog::AppSec::WAF::LibDDWAF.ddwaf_update(handle_obj, data_obj, diagnostics_obj)
546
550
 
547
551
  return if new_handle.null?
548
552
 
549
- info = {
550
- loaded: ruleset_info[:loaded],
551
- failed: ruleset_info[:failed],
552
- errors: WAF.object_to_ruby(ruleset_info[:errors]),
553
- version: ruleset_info[:version],
554
- }
555
- new_from_handle(new_handle, info, config)
553
+ diagnostics = Datadog::AppSec::WAF.object_to_ruby(diagnostics_obj)
554
+ new_from_handle(new_handle, diagnostics, config)
556
555
  ensure
557
556
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(data_obj) if data_obj
558
- Datadog::AppSec::WAF::LibDDWAF.ddwaf_ruleset_info_free(ruleset_info) if ruleset_info
557
+ Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(diagnostics_obj) if diagnostics_obj
559
558
  end
560
559
 
561
560
  private
562
561
 
563
- def new_from_handle(handle_object, info, config)
562
+ def new_from_handle(handle_object, diagnostics, config)
564
563
  obj = self.class.allocate
565
564
  obj.instance_variable_set(:@handle_obj, handle_object)
566
- obj.instance_variable_set(:@ruleset_info, info)
565
+ obj.instance_variable_set(:@diagnostics, diagnostics)
567
566
  obj.instance_variable_set(:@config, config)
568
567
  obj
569
568
  end
@@ -588,14 +587,15 @@ module Datadog
588
587
  end
589
588
 
590
589
  class Result
591
- attr_reader :status, :data, :total_runtime, :timeout, :actions
590
+ attr_reader :status, :events, :total_runtime, :timeout, :actions, :derivatives
592
591
 
593
- def initialize(status, data, total_runtime, timeout, actions)
592
+ def initialize(status, events, total_runtime, timeout, actions, derivatives)
594
593
  @status = status
595
- @data = data
594
+ @events = events
596
595
  @total_runtime = total_runtime
597
596
  @timeout = timeout
598
597
  @actions = actions
598
+ @derivatives = derivatives
599
599
  end
600
600
  end
601
601
 
@@ -636,7 +636,8 @@ module Datadog
636
636
  input_obj = Datadog::AppSec::WAF.ruby_to_object(input,
637
637
  max_container_size: max_container_size,
638
638
  max_container_depth: max_container_depth,
639
- max_string_length: max_string_length)
639
+ max_string_length: max_string_length,
640
+ coerce: false)
640
641
  if input_obj.null?
641
642
  fail LibDDWAF::Error, "Could not convert input: #{input.inspect}"
642
643
  end
@@ -651,18 +652,13 @@ module Datadog
651
652
 
652
653
  code = Datadog::AppSec::WAF::LibDDWAF.ddwaf_run(@context_obj, input_obj, result_obj, timeout)
653
654
 
654
- actions = if result_obj[:actions][:size] > 0
655
- result_obj[:actions][:array].get_array_of_string(0, result_obj[:actions][:size])
656
- else
657
- []
658
- end
659
-
660
655
  result = Result.new(
661
656
  RESULT_CODE[code],
662
- (JSON.parse(result_obj[:data]) if result_obj[:data] != nil),
657
+ Datadog::AppSec::WAF.object_to_ruby(result_obj[:events]),
663
658
  result_obj[:total_runtime],
664
659
  result_obj[:timeout],
665
- actions,
660
+ Datadog::AppSec::WAF.object_to_ruby(result_obj[:actions]),
661
+ Datadog::AppSec::WAF.object_to_ruby(result_obj[:derivatives]),
666
662
  )
667
663
 
668
664
  [RESULT_CODE[code], result]
@@ -3,9 +3,9 @@ module Datadog
3
3
  module WAF
4
4
  module LibDDWAF
5
5
  class Error < StandardError
6
- attr_reader ruleset_info: Hash[Symbol, untyped] | nil
6
+ attr_reader diagnostics: ::Datadog::AppSec::WAF::data
7
7
 
8
- def initialize: (::String msg, ?ruleset_info: Hash[Symbol, untyped]?) -> void
8
+ def initialize: (::String msg, ?diagnostics: ::Datadog::AppSec::WAF::data?) -> void
9
9
  end
10
10
 
11
11
  extend ::FFI::Library
@@ -52,9 +52,11 @@ module Datadog
52
52
  def self.ddwaf_object_stringl_nc: (LibDDWAF::Object, ::String, ::Integer) -> ::FFI::Pointer
53
53
  def self.ddwaf_object_unsigned: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
54
54
  def self.ddwaf_object_signed: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
55
- def self.ddwaf_object_unsigned_force: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
56
- def self.ddwaf_object_signed_force: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
55
+ def self.ddwaf_object_string_from_unsigned: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
56
+ def self.ddwaf_object_string_from_signed: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
57
57
  def self.ddwaf_object_bool: (LibDDWAF::Object, bool) -> ::FFI::Pointer
58
+ def self.ddwaf_object_float: (LibDDWAF::Object, ::Float) -> ::FFI::Pointer
59
+ def self.ddwaf_object_null: (LibDDWAF::Object) -> ::FFI::Pointer
58
60
 
59
61
  def self.ddwaf_object_array: (LibDDWAF::Object) -> ::FFI::Pointer
60
62
  def self.ddwaf_object_array_add: (LibDDWAF::Object, LibDDWAF::Object) -> bool
@@ -75,6 +77,7 @@ module Datadog
75
77
  def self.ddwaf_object_get_signed: (LibDDWAF::Object, SizeTPtr) -> ::Integer
76
78
  def self.ddwaf_object_get_index: (LibDDWAF::Object, ::Integer) -> LibDDWAF::Object
77
79
  def self.ddwaf_object_get_bool: (LibDDWAF::Object) -> bool
80
+ def self.ddwaf_object_get_float: (LibDDWAF::Object) -> ::Float
78
81
 
79
82
  # freeers
80
83
 
@@ -93,15 +96,8 @@ module Datadog
93
96
  end
94
97
  end
95
98
 
96
- class RuleSetInfo < ::FFI::Struct
97
- end
98
-
99
- RuleSetInfoNone: ::Datadog::AppSec::WAF::LibDDWAF::RuleSetInfo
100
-
101
- def self.ddwaf_ruleset_info_free: (RuleSetInfo) -> void
102
-
103
- def self.ddwaf_init: (top, Config, RuleSetInfo) -> ::FFI::Pointer
104
- def self.ddwaf_update: (::FFI::Pointer, LibDDWAF::Object, RuleSetInfo) -> ::FFI::Pointer
99
+ def self.ddwaf_init: (top, Config, Object) -> ::FFI::Pointer
100
+ def self.ddwaf_update: (::FFI::Pointer, LibDDWAF::Object, LibDDWAF::Object) -> ::FFI::Pointer
105
101
  def self.ddwaf_destroy: (::FFI::Pointer) -> void
106
102
 
107
103
  def self.ddwaf_required_addresses: (::FFI::Pointer, UInt32Ptr) -> ::FFI::Pointer
@@ -116,9 +112,6 @@ module Datadog
116
112
  def self.ddwaf_context_init: (::FFI::Pointer) -> ::FFI::Pointer
117
113
  def self.ddwaf_context_destroy: (::FFI::Pointer) -> void
118
114
 
119
- class ResultActions < ::FFI::Struct
120
- end
121
-
122
115
  class Result < ::FFI::Struct
123
116
  end
124
117
 
@@ -149,9 +142,9 @@ module Datadog
149
142
 
150
143
  def self.version: () -> ::String
151
144
 
152
- type data = String | Symbol | Integer | Float | TrueClass | FalseClass | Array[data] | Hash[String | Symbol, data] | nil
145
+ type data = String | Symbol | Integer | Float | TrueClass | FalseClass | Array[data] | Hash[(String | Symbol | nil), data] | nil
153
146
 
154
- def self.ruby_to_object: (data val, ?max_container_size: ::Integer?, ?max_container_depth: ::Integer?, ?max_string_length: ::Integer?, ?coerce: bool?) -> ::Datadog::AppSec::WAF::LibDDWAF::Object
147
+ def self.ruby_to_object: (top val, ?max_container_size: ::Integer?, ?max_container_depth: ::Integer?, ?max_string_length: ::Integer?, ?coerce: bool?) -> ::Datadog::AppSec::WAF::LibDDWAF::Object
155
148
  def self.object_to_ruby: (::Datadog::AppSec::WAF::LibDDWAF::Object obj) -> data
156
149
 
157
150
  self.@logger: ::Logger
@@ -165,35 +158,34 @@ module Datadog
165
158
 
166
159
  class Handle
167
160
  attr_reader handle_obj: ::FFI::Pointer
168
- attr_reader ruleset_info: Hash[Symbol, untyped]
161
+ attr_reader diagnostics: data
169
162
  attr_reader config: WAF::LibDDWAF::Config
170
163
 
171
164
  def initialize: (data rule, ?limits: ::Hash[::Symbol, ::Integer], ?obfuscator: ::Hash[::Symbol, ::String]) -> void
172
165
  def finalize: () -> untyped
173
166
  def required_addresses: () -> ::Array[::String]
174
- def update: (untyped data) -> Handle
167
+ def merge: (untyped data) -> Handle?
175
168
 
176
169
  private
177
170
 
178
171
  @valid: bool
179
172
 
180
- def new_from_handle: (::FFI::Pointer handle_object, Hash[Symbol, untyped] info, WAF::LibDDWAF::Config config) -> untyped
173
+ def new_from_handle: (::FFI::Pointer handle_object, data diagnostics, WAF::LibDDWAF::Config config) -> untyped
181
174
  def validate!: () -> void
182
175
  def invalidate!: () -> void
183
176
  def valid?: () -> (nil | bool)
184
177
  def valid!: () -> void
185
178
  end
186
179
 
187
- type result_data = Array[untyped] | nil
188
-
189
180
  class Result
190
181
  attr_reader status: ::Symbol
191
- attr_reader data: untyped
182
+ attr_reader events: data
192
183
  attr_reader total_runtime: ::Float
193
184
  attr_reader timeout: bool
194
- attr_reader actions: ::Array[::String]
185
+ attr_reader actions: data
186
+ attr_reader derivatives: data
195
187
 
196
- def initialize: (::Symbol, result_data, ::Float, bool, ::Array[::String]) -> void
188
+ def initialize: (::Symbol, data, ::Float, bool, data, data) -> void
197
189
  end
198
190
 
199
191
  class Context
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.9.0.0.1
4
+ version: 1.14.0.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-13 00:00:00.000000000 Z
11
+ date: 2023-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi