dalli 3.2.2 → 3.2.3

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: 539a5ec7700d7d96bece70021727ff422d24202ab9e89fd07afc623dc3480502
4
- data.tar.gz: ba9231846477125fd3ed77f5a60f0df3445e3cda12c1736cd71f6b299213accb
3
+ metadata.gz: f0ef39f4ff4e9e465b2522707f3c4eea85a94373ba0d3de4b9d940830001b118
4
+ data.tar.gz: 35cb362ec6075818f062106769481e92c90752936ecaf9a00fae25725ee4ea94
5
5
  SHA512:
6
- metadata.gz: 4039d6ce807dc60351f5781438ae84a0d2a147d5af567607653fcfb943ca3d3e0bcfd231cc67dbf4b761a5f0797ba4e5c99e9441d8d1e738eeb356805d139b89
7
- data.tar.gz: 5c31e6bc0d5b4b35280f7fd6747172838a8b037209d365906830634b32109a16c0301f732418c2ca99480ff3a37d9247a401c61e1d887ecf11a45dd4448d162b
6
+ metadata.gz: 0c6b2b205551fb10fb2e49ab7c3c3eba3c552c0bc4b8132783b51f6cdc7a9ddd4c272bd24ed13f9d78e29353e3b84daec001b2691ad630bdfd517bb7af86fd54
7
+ data.tar.gz: 6ef9f6733d8e6d5f8a6bf8fb7d782e99c450494e03d4e5fe46037b77665682df63eaa9a3eb05007d1720b175564c8e91524c0df92d0856dc1f68066501732a06
@@ -4,10 +4,19 @@ Dalli Changelog
4
4
  Unreleased
5
5
  ==========
6
6
 
7
+ 3.2.3
8
+ ==========
9
+
10
+ - Sanitize CAS inputs to ensure additional commands are not passed to memcached (xhzeem / petergoldstein)
11
+ - Sanitize input to flush command to ensure additional commands are not passed to memcached (xhzeem / petergoldstein)
12
+ - Namespaces passed as procs are now evaluated every time, as opposed to just on initialization (nrw505)
13
+ - Fix missing require of uri in ServerConfigParser (adam12)
14
+ - Fix link to the CHANGELOG.md file in README.md (rud)
15
+
7
16
  3.2.2
8
17
  ==========
9
18
 
10
- - Ensure apps are resilient against old session ids
19
+ - Ensure apps are resilient against old session ids (kbrock)
11
20
 
12
21
  3.2.1
13
22
  ==========
data/README.md CHANGED
@@ -27,7 +27,7 @@ The name is a variant of Salvador Dali for his famous painting [The Persistence
27
27
 
28
28
  ## Contributing
29
29
 
30
- If you have a fix you wish to provide, please fork the code, fix in your local project and then send a pull request on github. Please ensure that you include a test which verifies your fix and update `History.md` with a one sentence description of your fix so you get credit as a contributor.
30
+ If you have a fix you wish to provide, please fork the code, fix in your local project and then send a pull request on github. Please ensure that you include a test which verifies your fix and update the [changelog](CHANGELOG.md) with a one sentence description of your fix so you get credit as a contributor.
31
31
 
32
32
  ## Appreciation
33
33
 
@@ -61,7 +61,7 @@ module Dalli
61
61
  def key_with_namespace(key)
62
62
  return key if namespace.nil?
63
63
 
64
- "#{namespace}#{NAMESPACE_SEPARATOR}#{key}"
64
+ "#{evaluate_namespace}#{NAMESPACE_SEPARATOR}#{key}"
65
65
  end
66
66
 
67
67
  def key_without_namespace(key)
@@ -75,6 +75,8 @@ module Dalli
75
75
  end
76
76
 
77
77
  def namespace_regexp
78
+ return /\A#{Regexp.escape(evaluate_namespace)}:/ if namespace.is_a?(Proc)
79
+
78
80
  @namespace_regexp ||= /\A#{Regexp.escape(namespace)}:/.freeze unless namespace.nil?
79
81
  end
80
82
 
@@ -87,9 +89,15 @@ module Dalli
87
89
  def namespace_from_options
88
90
  raw_namespace = @key_options[:namespace]
89
91
  return nil unless raw_namespace
90
- return raw_namespace.call.to_s if raw_namespace.is_a?(Proc)
92
+ return raw_namespace.to_s unless raw_namespace.is_a?(Proc)
93
+
94
+ raw_namespace
95
+ end
96
+
97
+ def evaluate_namespace
98
+ return namespace.call.to_s if namespace.is_a?(Proc)
91
99
 
92
- raw_namespace.to_s
100
+ namespace
93
101
  end
94
102
 
95
103
  ##
@@ -167,7 +167,7 @@ module Dalli
167
167
  groups = @ring.keys_grouped_by_server(keys)
168
168
  if (unfound_keys = groups.delete(nil))
169
169
  Dalli.logger.debug do
170
- "unable to get keys for #{unfound_keys.length} keys "\
170
+ "unable to get keys for #{unfound_keys.length} keys " \
171
171
  'because no matching server was found'
172
172
  end
173
173
  end
@@ -31,7 +31,7 @@ module Dalli
31
31
  cmd << ' c' unless %i[append prepend].include?(mode)
32
32
  cmd << ' b' if base64
33
33
  cmd << " F#{bitflags}" if bitflags
34
- cmd << " C#{cas}" if cas && !cas.zero?
34
+ cmd << cas_string(cas)
35
35
  cmd << " T#{ttl}" if ttl
36
36
  cmd << " M#{mode_to_token(mode)}"
37
37
  cmd << ' q' if quiet
@@ -43,7 +43,7 @@ module Dalli
43
43
  def self.meta_delete(key:, cas: nil, ttl: nil, base64: false, quiet: false)
44
44
  cmd = "md #{key}"
45
45
  cmd << ' b' if base64
46
- cmd << " C#{cas}" if cas && !cas.zero?
46
+ cmd << cas_string(cas)
47
47
  cmd << " T#{ttl}" if ttl
48
48
  cmd << ' q' if quiet
49
49
  cmd + TERMINATOR
@@ -54,8 +54,9 @@ module Dalli
54
54
  cmd << ' b' if base64
55
55
  cmd << " D#{delta}" if delta
56
56
  cmd << " J#{initial}" if initial
57
- cmd << " C#{cas}" if cas && !cas.zero?
58
- cmd << " N#{ttl}" if ttl
57
+ # Always set a TTL if an initial value is specified
58
+ cmd << " N#{ttl || 0}" if ttl || initial
59
+ cmd << cas_string(cas)
59
60
  cmd << ' q' if quiet
60
61
  cmd << " M#{incr ? 'I' : 'D'}"
61
62
  cmd + TERMINATOR
@@ -75,7 +76,7 @@ module Dalli
75
76
 
76
77
  def self.flush(delay: nil, quiet: false)
77
78
  cmd = +'flush_all'
78
- cmd << " #{delay}" if delay
79
+ cmd << " #{parse_to_64_bit_int(delay, 0)}" if delay
79
80
  cmd << ' noreply' if quiet
80
81
  cmd + TERMINATOR
81
82
  end
@@ -102,6 +103,18 @@ module Dalli
102
103
  end
103
104
  end
104
105
  # rubocop:enable Metrics/MethodLength
106
+
107
+ def self.cas_string(cas)
108
+ cas = parse_to_64_bit_int(cas, nil)
109
+ cas.nil? || cas.zero? ? '' : " C#{cas}"
110
+ end
111
+
112
+ def self.parse_to_64_bit_int(val, default)
113
+ val.nil? ? nil : Integer(val)
114
+ rescue ArgumentError
115
+ # Sanitize to default if it isn't parsable as an integer
116
+ default
117
+ end
105
118
  end
106
119
  end
107
120
  end
@@ -44,6 +44,7 @@ module Dalli
44
44
  end
45
45
 
46
46
  def touch(key, ttl)
47
+ ttl = TtlSanitizer.sanitize(ttl)
47
48
  encoded_key, base64 = KeyRegularizer.encode(key)
48
49
  req = RequestFormatter.meta_get(key: encoded_key, ttl: ttl, value: false, base64: base64)
49
50
  write(req)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'uri'
4
+
3
5
  module Dalli
4
6
  module Protocol
5
7
  ##
data/lib/dalli/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dalli
4
- VERSION = '3.2.2'
4
+ VERSION = '3.2.3'
5
5
 
6
6
  MIN_SUPPORTED_MEMCACHED_VERSION = '1.4'
7
7
  end
@@ -170,7 +170,7 @@ module Rack
170
170
  def ensure_connection_pool_added!
171
171
  require 'connection_pool'
172
172
  rescue LoadError => e
173
- warn "You don't have connection_pool installed in your application. "\
173
+ warn "You don't have connection_pool installed in your application. " \
174
174
  'Please add it to your Gemfile and run bundle install'
175
175
  raise e
176
176
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dalli
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.2
4
+ version: 3.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter M. Goldstein
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-06-15 00:00:00.000000000 Z
12
+ date: 2022-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: connection_pool
@@ -151,8 +151,8 @@ executables: []
151
151
  extensions: []
152
152
  extra_rdoc_files: []
153
153
  files:
154
+ - CHANGELOG.md
154
155
  - Gemfile
155
- - History.md
156
156
  - LICENSE
157
157
  - README.md
158
158
  - lib/dalli.rb
@@ -206,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  requirements: []
209
- rubygems_version: 3.3.16
209
+ rubygems_version: 3.3.24
210
210
  signing_key:
211
211
  specification_version: 4
212
212
  summary: High performance memcached client for Ruby