sidekiq 7.0.5 → 7.0.8

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fec40f38a40f555d39f3826d0b2b26dd72d500a8e58a35ff2e85436ad5abb2c7
4
- data.tar.gz: b6b0fde1518951d5715484a046e0732224f819b6c45dba1e18c02e8292b97f55
3
+ metadata.gz: 69b692f7976998a1655a5c6f108c0a1f686fdcdcde164f6cde071f9ea3f89ced
4
+ data.tar.gz: d78d581fa48b744789b3af117a55d71bab1037b592f58ee9c74cf2c132716e0c
5
5
  SHA512:
6
- metadata.gz: c6e0d60356029b73764a1e57e3e6e570fa8e56758da14f6a16945f502f694d182f71e34b246eed4aaa022b184214f7da8253292deeb3b7540bcf14030b3a1139
7
- data.tar.gz: 3b03e4b1373288faceaee25ac08e73da00f3923bbbfd925b5b02dc0af6ec0c37fb7d23a14b6ec90be268df0441b974e100aa07462586b41648126d3b4020460a
6
+ metadata.gz: 42d16710f20a67a94df6498cf1fb5097a8795a5611f058e58d60e43e82503d26871c6d3061b3404590a0e0eba319997cb7e1daec3a88b66c2356e9cc0164a781
7
+ data.tar.gz: 5b6d9aa7512a67cb552c3a1bed37aa111a877927e7690f53efd3e85aa1ea7049fb75eb05b31232810c8a805f95cb0959a54cc80bafb5c80f9aae0c0701d158b7
data/Changes.md CHANGED
@@ -2,7 +2,23 @@
2
2
 
3
3
  [Sidekiq Changes](https://github.com/sidekiq/sidekiq/blob/main/Changes.md) | [Sidekiq Pro Changes](https://github.com/sidekiq/sidekiq/blob/main/Pro-Changes.md) | [Sidekiq Enterprise Changes](https://github.com/sidekiq/sidekiq/blob/main/Ent-Changes.md)
4
4
 
5
- 7.0.5
5
+ 7.0.8
6
+ ----------
7
+
8
+ - **SECURITY** Sanitize `period` input parameter on Metrics pages.
9
+ Specially crafted values can lead to XSS. This functionality
10
+ was introduced in 7.0.4. Thank you to spercex @ huntr.dev [#5694]
11
+ - Add job hash as 3rd parameter to the `sidekiq_retry_in` block.
12
+
13
+ 7.0.7
14
+ ----------
15
+
16
+ - Fix redis-client API usage which could result in stuck Redis
17
+ connections [#5823]
18
+ - Fix AS::Duration with `sidekiq_retry_in` [#5806]
19
+ - Restore dumping config options on startup with `-v` [#5822]
20
+
21
+ 7.0.5,7.0.6
6
22
  ----------
7
23
 
8
24
  - More context for debugging json unsafe errors [#5787]
data/lib/sidekiq/fetch.rb CHANGED
@@ -44,7 +44,7 @@ module Sidekiq # :nodoc:
44
44
  return nil
45
45
  end
46
46
 
47
- queue, job = redis { |conn| conn.blocking_call(false, "brpop", *qs, TIMEOUT) }
47
+ queue, job = redis { |conn| conn.blocking_call(TIMEOUT + 1, "brpop", *qs, TIMEOUT) }
48
48
  UnitOfWork.new(queue, job, config) if queue
49
49
  end
50
50
 
@@ -171,7 +171,7 @@ module Sidekiq
171
171
  # Goodbye dear message, you (re)tried your best I'm sure.
172
172
  return retries_exhausted(jobinst, msg, exception) if count >= max_retry_attempts
173
173
 
174
- strategy, delay = delay_for(jobinst, count, exception)
174
+ strategy, delay = delay_for(jobinst, count, exception, msg)
175
175
  case strategy
176
176
  when :discard
177
177
  return # poof!
@@ -190,17 +190,18 @@ module Sidekiq
190
190
  end
191
191
 
192
192
  # returns (strategy, seconds)
193
- def delay_for(jobinst, count, exception)
193
+ def delay_for(jobinst, count, exception, msg)
194
194
  rv = begin
195
195
  # sidekiq_retry_in can return two different things:
196
196
  # 1. When to retry next, as an integer of seconds
197
197
  # 2. A symbol which re-routes the job elsewhere, e.g. :discard, :kill, :default
198
- jobinst&.sidekiq_retry_in_block&.call(count, exception)
198
+ jobinst&.sidekiq_retry_in_block&.call(count, exception, msg)
199
199
  rescue Exception => e
200
200
  handle_exception(e, {context: "Failure scheduling retry using the defined `sidekiq_retry_in` in #{jobinst.class.name}, falling back to default"})
201
201
  nil
202
202
  end
203
203
 
204
+ rv = rv.to_i if rv.respond_to?(:to_i)
204
205
  delay = (count**4) + 15
205
206
  if Integer === rv && rv > 0
206
207
  delay = rv
@@ -21,8 +21,7 @@ module Sidekiq
21
21
  mode = Sidekiq::Config::DEFAULTS[:on_complex_arguments]
22
22
 
23
23
  if mode == :raise || mode == :warn
24
- unless json_safe?(args)
25
- unsafe_item = json_unsafe_item(args)
24
+ if (unsafe_item = json_unsafe?(args))
26
25
  msg = <<~EOM
27
26
  Job arguments to #{job_class} must be native JSON types, but #{unsafe_item.inspect} is a #{unsafe_item.class}.
28
27
  See https://github.com/sidekiq/sidekiq/wiki/Best-Practices.
@@ -70,50 +69,37 @@ module Sidekiq
70
69
 
71
70
  private
72
71
 
73
- RECURSIVE_JSON_SAFE = {
74
- Integer => ->(val) { true },
75
- Float => ->(val) { true },
76
- TrueClass => ->(val) { true },
77
- FalseClass => ->(val) { true },
78
- NilClass => ->(val) { true },
79
- String => ->(val) { true },
72
+ RECURSIVE_JSON_UNSAFE = {
73
+ Integer => ->(val) {},
74
+ Float => ->(val) {},
75
+ TrueClass => ->(val) {},
76
+ FalseClass => ->(val) {},
77
+ NilClass => ->(val) {},
78
+ String => ->(val) {},
80
79
  Array => ->(val) {
81
- val.all? { |e| RECURSIVE_JSON_SAFE[e.class].call(e) }
82
- },
83
- Hash => ->(val) {
84
- val.all? { |k, v| String === k && RECURSIVE_JSON_SAFE[v.class].call(v) }
85
- }
86
- }
87
-
88
- RECURSIVE_JSON_SAFE.default = ->(_val) { false }
89
- RECURSIVE_JSON_SAFE.compare_by_identity
90
- private_constant :RECURSIVE_JSON_SAFE
91
-
92
- def json_safe?(item)
93
- RECURSIVE_JSON_SAFE[item.class].call(item)
94
- end
95
-
96
- def json_unsafe_item(item)
97
- case item
98
- when String, Integer, Float, TrueClass, FalseClass, NilClass
99
- nil
100
- when Array
101
- item.each do |e|
102
- unsafe_item = json_unsafe_item(e)
80
+ val.each do |e|
81
+ unsafe_item = RECURSIVE_JSON_UNSAFE[e.class].call(e)
103
82
  return unsafe_item unless unsafe_item.nil?
104
83
  end
105
84
  nil
106
- when Hash
107
- item.each do |k, v|
85
+ },
86
+ Hash => ->(val) {
87
+ val.each do |k, v|
108
88
  return k unless String === k
109
89
 
110
- unsafe_item = json_unsafe_item(v)
90
+ unsafe_item = RECURSIVE_JSON_UNSAFE[v.class].call(v)
111
91
  return unsafe_item unless unsafe_item.nil?
112
92
  end
113
93
  nil
114
- else
115
- item
116
- end
94
+ }
95
+ }
96
+
97
+ RECURSIVE_JSON_UNSAFE.default = ->(val) { val }
98
+ RECURSIVE_JSON_UNSAFE.compare_by_identity
99
+ private_constant :RECURSIVE_JSON_UNSAFE
100
+
101
+ def json_unsafe?(item)
102
+ RECURSIVE_JSON_UNSAFE[item.class].call(item)
117
103
  end
118
104
  end
119
105
  end
@@ -37,6 +37,7 @@ module Sidekiq
37
37
  # and instead have thread call Launcher#heartbeat every N seconds.
38
38
  def run(async_beat: true)
39
39
  Sidekiq.freeze!
40
+ logger.debug { @config.merge!({}) }
40
41
  @thread = safe_thread("heartbeat", &method(:start_heartbeat)) if async_beat
41
42
  @poller.start
42
43
  @managers.each(&:start)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidekiq
4
- VERSION = "7.0.5"
4
+ VERSION = "7.0.8"
5
5
  MAJOR = 7
6
6
  end
@@ -68,7 +68,7 @@ module Sidekiq
68
68
 
69
69
  get "/metrics" do
70
70
  q = Sidekiq::Metrics::Query.new
71
- @period = params[:period]
71
+ @period = h((params[:period] || "")[0..1])
72
72
  @periods = METRICS_PERIODS
73
73
  minutes = @periods.fetch(@period, @periods.values.first)
74
74
  @query_result = q.top_jobs(minutes: minutes)
@@ -77,7 +77,7 @@ module Sidekiq
77
77
 
78
78
  get "/metrics/:name" do
79
79
  @name = route_params[:name]
80
- @period = params[:period]
80
+ @period = h((params[:period] || "")[0..1])
81
81
  q = Sidekiq::Metrics::Query.new
82
82
  @periods = METRICS_PERIODS
83
83
  minutes = @periods.fetch(@period, @periods.values.first)
data/sidekiq.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |gem|
19
19
  "bug_tracker_uri" => "https://github.com/sidekiq/sidekiq/issues",
20
20
  "documentation_uri" => "https://github.com/sidekiq/sidekiq/wiki",
21
21
  "changelog_uri" => "https://github.com/sidekiq/sidekiq/blob/main/Changes.md",
22
- "source_code_uri" => "https://github.com/sidekiq/sidekiq"
22
+ "source_code_uri" => "https://github.com/sidekiq/sidekiq",
23
+ "rubygems_mfa_required" => "true"
23
24
  }
24
25
 
25
26
  gem.add_dependency "redis-client", ">= 0.11.0"
data/web/locales/ja.yml CHANGED
@@ -27,6 +27,7 @@ ja:
27
27
  Extras: エクストラ
28
28
  Failed: 失敗
29
29
  Failures: 失敗
30
+ Failure: 失敗
30
31
  GoBack: ← 戻る
31
32
  History: 履歴
32
33
  Job: ジョブ
@@ -75,6 +76,7 @@ ja:
75
76
  Stop: 停止
76
77
  StopAll: すべて停止
77
78
  StopPolling: ポーリング停止
79
+ Success: 成功
78
80
  Thread: スレッド
79
81
  Threads: スレッド
80
82
  ThreeMonths: 3 ヶ月
@@ -82,7 +84,7 @@ ja:
82
84
  Unpause: 一時停止を解除
83
85
  Metrics: メトリクス
84
86
  NoDataFound: データが見つかりませんでした
85
- ExecutionTime: 合計実行時間
87
+ TotalExecutionTime: 合計実行時間
86
88
  AvgExecutionTime: 平均実行時間
87
89
  Context: コンテキスト
88
90
  Bucket: バケット
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.5
4
+ version: 7.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-15 00:00:00.000000000 Z
11
+ date: 2023-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis-client
@@ -205,6 +205,7 @@ metadata:
205
205
  documentation_uri: https://github.com/sidekiq/sidekiq/wiki
206
206
  changelog_uri: https://github.com/sidekiq/sidekiq/blob/main/Changes.md
207
207
  source_code_uri: https://github.com/sidekiq/sidekiq
208
+ rubygems_mfa_required: 'true'
208
209
  post_install_message: |2+
209
210
 
210
211
  Welcome to Sidekiq 7.0!
@@ -227,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
228
  - !ruby/object:Gem::Version
228
229
  version: '0'
229
230
  requirements: []
230
- rubygems_version: 3.4.6
231
+ rubygems_version: 3.4.7
231
232
  signing_key:
232
233
  specification_version: 4
233
234
  summary: Simple, efficient background processing for Ruby