pwnedkeys-filter 0.2.0 → 0.2.1

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pwnedkeys/filter.rb +39 -24
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b916d185473c8a9bb1a2cc28036121d7c015af4abc287a4cc778f91d8184ea5
4
- data.tar.gz: 3622ef85be404de370844c1fcede849a43e536d4c8261d43285ad45cc5d7ded4
3
+ metadata.gz: 796245e9ca46b1a37b657cac0f5cbd0157c132e7f1d887e5f2f4f1392e61473c
4
+ data.tar.gz: 37806ed3fe2de6c008ccc2cf7de48c1a73d426d29e54aadd7b7a77496f31f4f7
5
5
  SHA512:
6
- metadata.gz: e5a97277a35b9f2dd1901ab599bd3de39954c8bfceb868f3c33a3b275bc7390d2bb81a988d660d5f88d6cb5caf8043cacc830b02ebf14d4cb6d5d92094dce64a
7
- data.tar.gz: 9d1ee32b9cec58d5d235aa569192ddbd7fecff7db735217d925d2b9ddbaf46d99e0766388300110227edb7e3f5c8dd25f575ccc20654615020cd8e534b783ab5
6
+ metadata.gz: 34d5b2e319c3018c0778489ef5896a3b6a09d1b0bde206daef1d61452072f7cddfb7754a14ff207131c093e1c1780910c190a29b51f0ad5a42da155e7d158f4b
7
+ data.tar.gz: 47bf7be5f1ff4a5e6b55a9626c513b40117a647e3215b219b8204a60d50c2d93ec928926fdd495500b41619f28d6be60cc90efeca0136819eba645d01f2d330d
@@ -182,7 +182,11 @@ module Pwnedkeys
182
182
  filter = Pwnedkeys::Filter.new(filename)
183
183
 
184
184
  if block_given?
185
- yield filter
185
+ begin
186
+ yield filter
187
+ ensure
188
+ filter.close
189
+ end
186
190
  else
187
191
  filter
188
192
  end
@@ -242,28 +246,34 @@ module Pwnedkeys
242
246
 
243
247
  spki = spkify(key)
244
248
 
245
- filter_positions(spki.to_der).each do |n|
246
- @fd.seek(n / 8 + @header.header_size, :SET)
247
- byte = @fd.read(1).ord
248
- @fd.seek(-1, :CUR)
249
+ begin
250
+ @fd.flock(File::LOCK_EX)
251
+ filter_positions(spki.to_der).each do |n|
252
+ @fd.seek(n / 8 + @header.header_size, :SET)
253
+ byte = @fd.read(1).ord
254
+ @fd.seek(-1, :CUR)
249
255
 
250
- mask = 2 ** (7 - (n % 8))
251
- new_byte = byte | mask
256
+ mask = 2 ** (7 - (n % 8))
257
+ new_byte = byte | mask
252
258
 
253
- @fd.write(new_byte.chr)
254
- end
259
+ @fd.write(new_byte.chr)
260
+ end
255
261
 
256
- @header.entry_added!
262
+ @header.entry_added!
257
263
 
258
- # Only update the revision if this is the first add in this filter,
259
- # because otherwise the revision counter would just be the same as the
260
- # entry counter, and that would be pointless.
261
- unless @already_modified
262
- @header.update!
263
- end
264
+ # Only update the revision if this is the first add in this filter,
265
+ # because otherwise the revision counter would just be the same as the
266
+ # entry counter, and that would be pointless.
267
+ unless @already_modified
268
+ @header.update!
269
+ end
264
270
 
265
- @fd.seek(0)
266
- @fd.write(@header.to_s)
271
+ @fd.seek(0)
272
+ @fd.write(@header.to_s)
273
+ @fd.fdatasync
274
+ ensure
275
+ @fd.flock(File::LOCK_UN)
276
+ end
267
277
 
268
278
  @already_modified = true
269
279
  end
@@ -333,12 +343,17 @@ module Pwnedkeys
333
343
  end
334
344
 
335
345
  def filter_bits(s)
336
- filter_positions(s).map do |n|
337
- @fd.seek(n / 8 + @header.header_size, :SET)
338
- byte = @fd.read(1).ord
339
- mask = 2 ** (7 - (n % 8))
340
-
341
- (byte & mask) > 0
346
+ begin
347
+ @fd.flock(File::LOCK_SH)
348
+ filter_positions(s).map do |n|
349
+ @fd.seek(n / 8 + @header.header_size, :SET)
350
+ byte = @fd.read(1).ord
351
+ mask = 2 ** (7 - (n % 8))
352
+
353
+ (byte & mask) > 0
354
+ end
355
+ ensure
356
+ @fd.flock(File::LOCK_UN)
342
357
  end
343
358
  end
344
359
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwnedkeys-filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-04 00:00:00.000000000 Z
11
+ date: 2020-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openssl-additions