ddtrace 1.16.1 → 1.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4e85c12caf77e324eee9de8f9ddf143b0e49c3487230ff841ab7a5be05e4c7d
4
- data.tar.gz: 44d799e085ae66280177800c136c656085d6f1fc5d32085c2852158c4290ef59
3
+ metadata.gz: 31833e75aea54c0952a8c9bce646f0e75e304a3d9124f372c022a6bb5c700ea6
4
+ data.tar.gz: 6c487891f51fb0ef0c196fab1135f20d99417db62d82ee985cac621fb584f00a
5
5
  SHA512:
6
- metadata.gz: 8c651f6acbdff86fac984f61df4f2322eb449e3355220810a955496c51d33565ddbd6d15f3ca5049f9f0738c93508db9def7c24f046a51d3ef616b6182a1ca4d
7
- data.tar.gz: 75fc3aa27da60ec0998087a814f77fe33a4f4c0bcbbda52b647cc00552945e412fa8d7e276d69d470b258da8c204db5186f24118cf4e0dc24bec9c1681ed1c33
6
+ metadata.gz: d410408162b5ac03f8f80b8a18f5bd1adbcdd70625a45d288bd2f83a38b3b4668514d70ffd57c829d2ecfc9d7c2ac147ed831ccc7f45843ab51676fe501af2be
7
+ data.tar.gz: a76c4aef579a961e0d588577d42ea23ee2ab28f08fa75d29de2fd422e3e8a5c3543e3ea63ae260ddee054c0b4ffa38c469ece4307abac92d36c08d32a971b3f2
data/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [1.16.2] - 2023-11-10
6
+
7
+ This release reverts a change to appsec response body parsing that was introduced in [1.16.0 ](https://github.com/DataDog/dd-trace-rb/releases/tag/v1.16.0) that may cause memory leaks.
8
+
9
+ ### Fixed
10
+ * Appsec: [Revert parse response body fix introduced in 1.16.0](https://github.com/DataDog/dd-trace-rb/pull/3153) ([#3252][])
11
+
5
12
  ## [1.16.1] - 2023-11-08
6
13
 
7
14
  ### Fixed
@@ -2627,7 +2634,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
2627
2634
  Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
2628
2635
 
2629
2636
 
2630
- [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.16.1...master
2637
+ [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.16.2...master
2638
+ [1.16.2]: https://github.com/DataDog/dd-trace-rb/compare/v1.16.1...v1.16.2
2631
2639
  [1.16.1]: https://github.com/DataDog/dd-trace-rb/compare/v1.16.0...v1.16.1
2632
2640
  [1.16.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.15.0...v1.16.0
2633
2641
  [1.15.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.14.0...v1.15.0
@@ -3841,6 +3849,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
3841
3849
  [#3235]: https://github.com/DataDog/dd-trace-rb/issues/3235
3842
3850
  [#3240]: https://github.com/DataDog/dd-trace-rb/issues/3240
3843
3851
  [#3242]: https://github.com/DataDog/dd-trace-rb/issues/3242
3852
+ [#3252]: https://github.com/DataDog/dd-trace-rb/issues/3252
3844
3853
  [@AdrianLC]: https://github.com/AdrianLC
3845
3854
  [@Azure7111]: https://github.com/Azure7111
3846
3855
  [@BabyGroot]: https://github.com/BabyGroot
@@ -188,12 +188,6 @@ module Datadog
188
188
  end
189
189
  end
190
190
  end
191
-
192
- option :parse_response_body do |o|
193
- o.type :bool
194
- o.env 'DD_API_SECURITY_PARSE_RESPONSE_BODY'
195
- o.default true
196
- end
197
191
  end
198
192
  end
199
193
  end
@@ -19,55 +19,9 @@ module Datadog
19
19
  @scope = scope
20
20
  end
21
21
 
22
- def parsed_body
23
- return unless Datadog.configuration.appsec.parse_response_body
24
-
25
- unless body.instance_of?(Array)
26
- Datadog.logger.debug do
27
- "Response body type unsupported: #{body.class}"
28
- end
29
- return
30
- end
31
-
32
- return unless json_content_type?
33
-
34
- result = ''.dup
35
- all_body_parts_are_string = true
36
-
37
- body.each do |body_part|
38
- if body_part.is_a?(String)
39
- result.concat(body_part)
40
- else
41
- all_body_parts_are_string = false
42
- break
43
- end
44
- end
45
-
46
- return unless all_body_parts_are_string
47
-
48
- begin
49
- JSON.parse(result)
50
- rescue JSON::ParserError => e
51
- Datadog.logger.debug { "Failed to parse response body. Error #{e.class}. Message #{e.message}" }
52
- nil
53
- end
54
- end
55
-
56
22
  def response
57
23
  @response ||= ::Rack::Response.new(body, status, headers)
58
24
  end
59
-
60
- private
61
-
62
- VALID_JSON_TYPES = [
63
- 'application/json',
64
- 'text/json'
65
- ].freeze
66
-
67
- def json_content_type?
68
- content_type = headers['content-type']
69
- VALID_JSON_TYPES.include?(content_type)
70
- end
71
25
  end
72
26
  end
73
27
  end
@@ -10,7 +10,6 @@ module Datadog
10
10
  ADDRESSES = [
11
11
  'response.status',
12
12
  'response.headers',
13
- 'response.body',
14
13
  ].freeze
15
14
  private_constant :ADDRESSES
16
15
 
@@ -18,7 +17,6 @@ module Datadog
18
17
  catch(:block) do
19
18
  op.publish('response.status', gateway_response.status)
20
19
  op.publish('response.headers', gateway_response.headers)
21
- op.publish('response.body', gateway_response.parsed_body)
22
20
 
23
21
  nil
24
22
  end
@@ -31,7 +29,6 @@ module Datadog
31
29
  response_status = values[0]
32
30
  response_headers = values[1]
33
31
  response_headers_no_cookies = response_headers.dup.tap { |h| h.delete('set-cookie') }
34
- response_body = values[2]
35
32
 
36
33
  waf_args = {
37
34
  'server.response.status' => response_status.to_s,
@@ -39,8 +36,6 @@ module Datadog
39
36
  'server.response.headers.no_cookies' => response_headers_no_cookies,
40
37
  }
41
38
 
42
- waf_args['server.response.body'] = response_body if response_body
43
-
44
39
  waf_timeout = Datadog.configuration.appsec.waf_timeout
45
40
  result = waf_context.run(waf_args, waf_timeout)
46
41
 
@@ -66,16 +66,6 @@ module Datadog
66
66
  request_return = AppSec::Response.negotiate(env, blocked_event.last[:actions]).to_rack if blocked_event
67
67
  end
68
68
 
69
- if request_return[2].respond_to?(:to_ary)
70
- # Following the Rack specification. The response body should only call :each once.
71
- # Calling :to_ary returns an array with identical content as the produced when calling :each
72
- # replacing request_return[2] with that new value allow us to safely operate on the response body.
73
- # On Gateway::Response#parsed_body we might iterate over the reposne body using :each
74
- # https://github.com/rack/rack/blob/main/SPEC.rdoc#enumerable-body-
75
- consumed_body = request_return[2].to_ary
76
- request_return[2] = consumed_body if consumed_body
77
- end
78
-
79
69
  gateway_response = Gateway::Response.new(
80
70
  request_return[2],
81
71
  request_return[0],
@@ -330,7 +330,7 @@ module Datadog
330
330
  # Caveat 3 (severe):
331
331
  # Ruby 3.2.0 to 3.2.2 have a bug in the newobj tracepoint (https://bugs.ruby-lang.org/issues/19482,
332
332
  # https://github.com/ruby/ruby/pull/7464) so that's an extra reason why it's not safe on those Rubies.
333
- # This bug is fixed on Ruby versions 3.2.2 and 3.3.0.
333
+ # This bug is fixed on Ruby versions 3.2.3 and 3.3.0.
334
334
  #
335
335
  # @default `true` on Ruby 2.x and 3.1.4+, 3.2.3+ and 3.3.0+; `false` for Ruby 3.0 and unpatched Rubies.
336
336
  option :allocation_counting_enabled do |o|
@@ -4,7 +4,7 @@ module DDTrace
4
4
  module VERSION
5
5
  MAJOR = 1
6
6
  MINOR = 16
7
- PATCH = 1
7
+ PATCH = 2
8
8
  PRE = nil
9
9
  BUILD = nil
10
10
  # PRE and BUILD above are modified for dev gems during gem build GHA workflow
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddtrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.1
4
+ version: 1.16.2
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-11-08 00:00:00.000000000 Z
11
+ date: 2023-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -890,7 +890,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
890
890
  - !ruby/object:Gem::Version
891
891
  version: 2.0.0
892
892
  requirements: []
893
- rubygems_version: 3.4.10
893
+ rubygems_version: 3.4.1
894
894
  signing_key:
895
895
  specification_version: 4
896
896
  summary: Datadog tracing code for your Ruby applications