pwnedkeys-filter 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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