script_core 0.0.3 → 0.0.4
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfb29eda17a289a639eaeda3bd447732d774ea5c9a6f7ec5e3d71406891d3376
|
4
|
+
data.tar.gz: 4245f1728f35920db4d370805ad38951f9ae9695807a7a090ba799207f8a6acf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9d7e1a4acfe78e4a05371e44955bc6032b4844384eacac24a188bd3f9a2737be592f0ee39845d16bec1ee18244a63d5627492275593a2953844f57f6b9fbe7f
|
7
|
+
data.tar.gz: 463bfd37532feea17dbad1c91e3cd5c35aecb93162c1fe40209198f7fdd4d43b4fe5f899d24a37f79fd39ff75afba5969a3eb90c04ee247b60d2b7671cba2564
|
data/lib/script_core/engine.rb
CHANGED
@@ -20,7 +20,7 @@ module ScriptCore
|
|
20
20
|
@instructions = File.exist?(preload_instructions_path) ? File.binread(preload_instructions_path) : nil
|
21
21
|
end
|
22
22
|
|
23
|
-
def eval(sources, input: nil, instruction_quota_start: nil)
|
23
|
+
def eval(sources, input: nil, instruction_quota_start: nil, environment_variables: {})
|
24
24
|
@executable.run(
|
25
25
|
input: input || {},
|
26
26
|
sources: sources,
|
@@ -28,7 +28,8 @@ module ScriptCore
|
|
28
28
|
timeout: @timeout,
|
29
29
|
instruction_quota: @instruction_quota,
|
30
30
|
instruction_quota_start: instruction_quota_start || @instruction_quota_start,
|
31
|
-
memory_quota: @memory_quota
|
31
|
+
memory_quota: @memory_quota,
|
32
|
+
environment_variables: environment_variables
|
32
33
|
)
|
33
34
|
end
|
34
35
|
end
|
@@ -12,7 +12,9 @@ module ScriptCore
|
|
12
12
|
@executable_path = executable_path.to_s
|
13
13
|
end
|
14
14
|
|
15
|
-
def run(input:, sources:, instructions: nil,
|
15
|
+
def run(input:, sources:, instructions: nil,
|
16
|
+
timeout: 1, instruction_quota: 100_000, instruction_quota_start: 0, memory_quota: 8 << 20,
|
17
|
+
environment_variables: {})
|
16
18
|
packer = ScriptCore::Protocol.packer_factory.packer
|
17
19
|
|
18
20
|
payload = {input: input, sources: sources}
|
@@ -28,7 +30,8 @@ module ScriptCore
|
|
28
30
|
spawner,
|
29
31
|
instruction_quota,
|
30
32
|
instruction_quota_start,
|
31
|
-
memory_quota
|
33
|
+
memory_quota,
|
34
|
+
environment_variables
|
32
35
|
)
|
33
36
|
runner = ScriptCore::Runner.new(
|
34
37
|
timeout: timeout,
|
@@ -2,14 +2,15 @@
|
|
2
2
|
|
3
3
|
module ScriptCore
|
4
4
|
class ServiceProcess
|
5
|
-
attr_reader(:path, :spawner, :instruction_quota, :instruction_quota_start, :memory_quota)
|
5
|
+
attr_reader(:path, :spawner, :instruction_quota, :instruction_quota_start, :memory_quota, :environment_variables)
|
6
6
|
|
7
|
-
def initialize(path, spawner, instruction_quota, instruction_quota_start, memory_quota)
|
7
|
+
def initialize(path, spawner, instruction_quota, instruction_quota_start, memory_quota, environment_variables = {})
|
8
8
|
@path = path
|
9
9
|
@spawner = spawner
|
10
10
|
@instruction_quota = instruction_quota
|
11
11
|
@instruction_quota_start = instruction_quota_start
|
12
12
|
@memory_quota = memory_quota
|
13
|
+
@environment_variables = environment_variables
|
13
14
|
end
|
14
15
|
|
15
16
|
def open
|
@@ -17,6 +18,7 @@ module ScriptCore
|
|
17
18
|
out_reader, out_writer = IO.pipe
|
18
19
|
|
19
20
|
pid = spawner.spawn(
|
21
|
+
environment_variables,
|
20
22
|
path,
|
21
23
|
"-i", instruction_quota.to_s,
|
22
24
|
"-C", instruction_quota_start.to_s,
|
data/lib/script_core/version.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
RSpec.describe(ScriptCore::ServiceProcess) do
|
4
4
|
let(:pid) { rand(1 << 16) }
|
5
|
+
let(:environment_variables) { {"TZ" => "US/Pacific"} }
|
5
6
|
let(:service_path) { "bin/my-subprocess" }
|
6
7
|
let(:pipe_pairs) { [] }
|
7
8
|
|
@@ -13,13 +14,14 @@ RSpec.describe(ScriptCore::ServiceProcess) do
|
|
13
14
|
end
|
14
15
|
|
15
16
|
let(:service_process) do
|
16
|
-
ScriptCore::ServiceProcess.new(service_path, spawner, 100_000, 2, 4 << 20)
|
17
|
+
ScriptCore::ServiceProcess.new(service_path, spawner, 100_000, 2, 4 << 20, environment_variables)
|
17
18
|
end
|
18
19
|
|
19
20
|
it "creates a channel to communicate with the subprocess" do
|
20
21
|
in_reader = nil
|
21
22
|
out_writer = nil
|
22
|
-
expect(spawner).to receive(:spawn) do |path, **options|
|
23
|
+
expect(spawner).to receive(:spawn) do |env, path, **options|
|
24
|
+
expect(env).to eq(environment_variables)
|
23
25
|
expect(path).to eq(service_path)
|
24
26
|
in_reader = options[:in].dup
|
25
27
|
expect(in_reader).to be_an(IO)
|
@@ -41,7 +43,7 @@ RSpec.describe(ScriptCore::ServiceProcess) do
|
|
41
43
|
|
42
44
|
it "open passes arguments to process" do
|
43
45
|
expect(spawner)
|
44
|
-
.to receive(:spawn).once.with(instance_of(String), "-i", 100_000.to_s, "-C", 2.to_s, "-m", (4 << 20).to_s, instance_of(Hash))
|
46
|
+
.to receive(:spawn).once.with(instance_of(Hash), instance_of(String), "-i", 100_000.to_s, "-C", 2.to_s, "-m", (4 << 20).to_s, instance_of(Hash))
|
45
47
|
service_process.open do |c|
|
46
48
|
end
|
47
49
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: script_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jasl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -3597,7 +3597,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
3597
3597
|
version: '0'
|
3598
3598
|
requirements: []
|
3599
3599
|
rubyforge_project:
|
3600
|
-
rubygems_version: 2.7.
|
3600
|
+
rubygems_version: 2.7.4
|
3601
3601
|
signing_key:
|
3602
3602
|
specification_version: 4
|
3603
3603
|
summary: A script engine powered by a mruby sandboxie, It's forked by Shopify's ESS.
|