gitlab-secret_detection 0.20.5 → 0.20.6

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: 23578f20fb18d7b642384e60e58139a77e346ae33ace701fa3712d28df0c95fe
4
- data.tar.gz: 4abca422e9f0b3c062e500133419442a77b24982eea786484d189857a68b4ddf
3
+ metadata.gz: cc65583db26adf76bc2c82147e9a0968d3a492650c674021b1b880999ccac7ae
4
+ data.tar.gz: 1def241bf981547d439b1c2779b15a23906162c48fb25f341518145154c25a4d
5
5
  SHA512:
6
- metadata.gz: ddee53db684c615a08a70b1b98177f313a727eae17659b1e3219d6899cca02243d39543588574feabd5b53261d14b28b777bb2297b0bc0c2ec80be4bc4ab393c
7
- data.tar.gz: 7a6df06f37dba1999c40bbfb241566560f1fdf347b555cf6fa1e29dd6153fa33f78fe44edb6c649cf9ea2e39d5e7003a85fe18306282284c7ee996f296ca8967
6
+ metadata.gz: daaa4b44fab4a9bdc6afa35e69d9cc0bdb64821d43ad373ea5660c3875191e060b937f89f09b06f7216e836c86d3174da769037929c5407ab1b217e9f1bc4781
7
+ data.tar.gz: f454b936f67cb98412b77cb83ddcab017e3a5885b87ea2eef6c6248c06854f24f02273bf3c58466c33781495e80b0cb327bb9f2e9fe3f5ae5bc9ac5b0c564a31
@@ -17,6 +17,9 @@ module Gitlab
17
17
  # Time to wait for the response from the service
18
18
  REQUEST_TIMEOUT_SECONDS = 10 # 10 seconds
19
19
 
20
+ # Total payload size limit allowed per scan request
21
+ MAX_PAYLOAD_SIZE_PER_REQUEST = 4_000_000 # 3.8MiB (0.2MiB buffer for other request props)
22
+
20
23
  def initialize(host, secure: false, compression: true, logger: nil)
21
24
  @host = host
22
25
  @secure = secure
@@ -30,6 +33,20 @@ module Gitlab
30
33
  # +Gitlab::SecretDetection::Core::Response+ type by assiging a appropriate +status+ value to it.
31
34
  def run_scan(request:, auth_token:, extra_headers: {})
32
35
  with_rescued_errors do
36
+ payload_size = calculate_payload_size(request)
37
+ if payload_size >= MAX_PAYLOAD_SIZE_PER_REQUEST
38
+ @logger.info(
39
+ message: "Skipping to send Scan Request to Secret Detection server due to request size overlimit",
40
+ payload_size:
41
+ )
42
+
43
+ next Gitlab::SecretDetection::GRPC::ScanResponse.new(
44
+ results: [],
45
+ status: SecretDetection::Core::Status::INPUT_ERROR,
46
+ applied_exclusions: []
47
+ )
48
+ end
49
+
33
50
  grpc_response = stub.scan(
34
51
  request,
35
52
  metadata: build_metadata(auth_token, extra_headers),
@@ -52,6 +69,19 @@ module Gitlab
52
69
  request_stream = Gitlab::SecretDetection::GRPC::StreamRequestEnumerator.new(requests)
53
70
  results = []
54
71
  with_rescued_errors do
72
+ has_oversized_request = requests.any? do |request|
73
+ payload_size = calculate_payload_size(request)
74
+ payload_size >= MAX_PAYLOAD_SIZE_PER_REQUEST
75
+ end
76
+
77
+ if has_oversized_request
78
+ @logger.info("Skipping to send Scan Request to Secret Detection server due to request size overlimit")
79
+ response = Gitlab::SecretDetection::GRPC::ScanResponse.new(
80
+ status: SecretDetection::Core::Status::INPUT_ERROR
81
+ )
82
+ next (block_given? ? response : [response])
83
+ end
84
+
55
85
  stub.scan_stream(
56
86
  request_stream.each_item,
57
87
  metadata: build_metadata(auth_token, extra_headers),
@@ -123,13 +153,23 @@ module Gitlab
123
153
  results: nil,
124
154
  metadata: { message: e.details, **e.metadata }
125
155
  )
156
+ rescue ::GRPC::ResourceExhausted => e
157
+ @logger.error(message: "Secret Detection Server resource exhausted: #{e.details}", **e.metadata)
158
+ SecretDetection::Core::Response.new(
159
+ status: SecretDetection::Core::Status::SCAN_ERROR,
160
+ metadata: { message: e.details, **e.metadata }
161
+ )
126
162
  rescue ::GRPC::Unknown, ::GRPC::BadStatus => e
127
163
  SecretDetection::Core::Response.new(
128
164
  status: SecretDetection::Core::Status::SCAN_ERROR,
129
165
  results: nil,
130
- metadata: { message: e.details }
166
+ metadata: { message: e.details, **e.metadata }
131
167
  )
132
168
  end
169
+
170
+ def calculate_payload_size(request)
171
+ request&.payloads&.reduce(0) { |total, p| total + p.data.size + p.id.size }
172
+ end
133
173
  end
134
174
  end
135
175
  end
@@ -8,7 +8,7 @@ module Gitlab
8
8
  # https://gitlab.com/gitlab-org/gitlab/-/issues/514015
9
9
  #
10
10
  # Ensure to maintain the same version in CHANGELOG file.
11
- VERSION = "0.20.5"
11
+ VERSION = "0.20.6"
12
12
 
13
13
  # SD_ENV env var is used to determine which environment the
14
14
  # server is running. This var is defined in `.runway/env-<env>.yml` files.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-secret_detection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.5
4
+ version: 0.20.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - group::secret detection
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-03-11 00:00:00.000000000 Z
13
+ date: 2025-03-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: grpc