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