safe_regexp 0.2.1 → 0.2.2
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 +4 -4
- data/lib/safe_regexp/version.rb +1 -1
- data/lib/safe_regexp.rb +25 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a08c39c5fefd324f445219dd0a9c1480fc6e7fb9a8d87d2a8c94cb8fe9ffe842
|
4
|
+
data.tar.gz: 5a0fcafc1b454f4cbb870d3ca5ec6052614688c6f1431cd9e413e2542e07a691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfce8cc283436b706e02be017a6b5cc515255ff058b853c10cfbd9c568ae8e5e73f7e8f368a3fbf6bb97164cb6ec6caee1845973dc5e0e13f1147664fc972b65
|
7
|
+
data.tar.gz: 05ae09e0f259262cc3f5b93b6c180ecea9031efc8f17e1234b04d0720bc057707d959b0a978d2d0c0cb2021e4e3d68f0ba53a8623170ebded1c752a91ecc6331
|
data/lib/safe_regexp/version.rb
CHANGED
data/lib/safe_regexp.rb
CHANGED
@@ -9,22 +9,36 @@ module SafeRegexp
|
|
9
9
|
class << self
|
10
10
|
def execute(regex, method, string, timeout: 1, keepalive: 10)
|
11
11
|
retried = false
|
12
|
+
|
12
13
|
begin
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
loading_result = false
|
15
|
+
|
16
|
+
begin
|
17
|
+
read, write, pid = executor
|
18
|
+
Marshal.dump([regex, method, string, keepalive], write)
|
19
|
+
rescue Errno::EPIPE
|
20
|
+
# keepalive already killed the process, but we don't check before sending
|
21
|
+
# since that would be a race condition and cause overhead for the 99.9% case
|
22
|
+
raise if retried
|
23
|
+
retried = true
|
24
|
+
discard_executor # avoiding kill overhead since it's already dead
|
25
|
+
retry # new executor will be created by `executor` call
|
26
|
+
end
|
27
|
+
|
28
|
+
unless IO.select([read], nil, nil, timeout)
|
29
|
+
kill_executor pid
|
30
|
+
raise RegexpTimeout
|
31
|
+
end
|
32
|
+
|
33
|
+
loading_result = true
|
34
|
+
result = Marshal.load(read)
|
35
|
+
rescue EOFError # process was dead from keepalive when we sent to it or got killed from outside
|
36
|
+
raise if retried || !loading_result
|
17
37
|
retried = true
|
18
38
|
discard_executor # avoiding kill overhead since it's already dead
|
19
|
-
retry
|
20
|
-
end
|
21
|
-
|
22
|
-
unless IO.select([read], nil, nil, timeout)
|
23
|
-
kill_executor pid
|
24
|
-
raise RegexpTimeout
|
39
|
+
retry
|
25
40
|
end
|
26
41
|
|
27
|
-
result = Marshal.load(read)
|
28
42
|
result.is_a?(RESCUED_EXCEPTION) ? raise(result) : result
|
29
43
|
end
|
30
44
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: safe_regexp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: michael@grosser.it
|