transparent-lua 0.3 → 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,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTdjMDIwNDBlMGM4MWIxMmEyYmUyOTg0Mjg4OTkwYTY1MmE1NzIwOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTM4YWIxODAzNDVmYjkzZTY1MmM1MTc0ZDFhMTMyOWM1YWE3OWE4Ng==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzkyNGMzNGNjNjI4OGZmZTk2NmI0NDM0ZGVlNzRiNTNkNDY5MjNiODA1ODgx
|
10
|
+
ZTA5MDI1OGMxZDdmNzY4ZmE5MTBmMDQ1NTFmMzc3ZDg5NDYwYzNiZjVhOTc4
|
11
|
+
NDYwMWQ4MTYwMWQyYzU4YmFkNTNiMTRiZDI0NjM5ZWVjOTJhMzg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmIwMjMxMjI2YmM4OTAyNTAwMWY2MTQ5YTRlZTY5YTQyYzcxYTMyZTBiZWZk
|
14
|
+
ZWQ3ZjVlMzFmNmRlMDcxNWViYWQ3ZDNjOTVlNmNiOWI3MmYxOGI0NmY4MzFm
|
15
|
+
YjJjZDA5OWU2MmYwNDNlNDU0NDg1ZGU5NzQwMDJhOWFiMDVhZmU=
|
@@ -83,4 +83,27 @@ Feature: Sandbox exposition
|
|
83
83
|
When I execute the script
|
84
84
|
Then it should return "#<Sandbox Member Class>"
|
85
85
|
|
86
|
+
Scenario: Requiring virtual files
|
87
|
+
Given an empty sandbox
|
88
|
+
And the following code executed in the sandbox:
|
89
|
+
"""
|
90
|
+
def can_require_module?(modname)
|
91
|
+
modname == 'virtual_module'
|
92
|
+
end
|
93
|
+
|
94
|
+
def require_module(modname)
|
95
|
+
<<-EOMOD
|
96
|
+
function virtual_function()
|
97
|
+
return('Virtual return value')
|
98
|
+
end
|
99
|
+
EOMOD
|
100
|
+
end
|
101
|
+
"""
|
102
|
+
And the following Lua script:
|
103
|
+
"""
|
104
|
+
require('virtual_module');
|
105
|
+
return(virtual_function());
|
106
|
+
"""
|
107
|
+
When I execute the script
|
108
|
+
Then it should return "Virtual return value"
|
86
109
|
|
@@ -32,8 +32,10 @@ Given(/^an? sandbox with an empty member class$/) do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
And(/^the following (?:method definition as part of|code executed in) the sandbox: (.*)$/) do |
|
36
|
-
|
35
|
+
And(/^the following (?:method definition as part of|code executed in) the sandbox: ?(.*)$/) do |*args|
|
36
|
+
inline_code, text_code = *args
|
37
|
+
code = String(text_code).empty? ? String(inline_code) : String(text_code)
|
38
|
+
@sandbox_class.class_eval(code)
|
37
39
|
end
|
38
40
|
|
39
41
|
And(/^the following method definition as part of the member class: (.*)$/) do |method_definition|
|
data/lib/transparent_lua.rb
CHANGED
@@ -46,6 +46,33 @@ class TransparentLua
|
|
46
46
|
global_metatable['__newindex'] = newindex_table(sandbox) if leak_globals
|
47
47
|
|
48
48
|
state._G.__metatable = global_metatable
|
49
|
+
|
50
|
+
state.package.loaders = Lua::Table.new(state)
|
51
|
+
state.package.loaders[1] = ->(modname) do
|
52
|
+
return "\n\tno module '#{modname}' available in sandbox" unless can_require_module? modname
|
53
|
+
|
54
|
+
loader = ->(modname) do
|
55
|
+
source = require_module(modname)
|
56
|
+
state.__eval(source, "=#{modname}")
|
57
|
+
true
|
58
|
+
end
|
59
|
+
|
60
|
+
state.package.loaded[modname] = loader
|
61
|
+
loader
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def can_require_module?(modname)
|
66
|
+
return false unless sandbox.respond_to? :can_require_module?
|
67
|
+
|
68
|
+
sandbox.can_require_module? modname
|
69
|
+
end
|
70
|
+
|
71
|
+
def require_module(modname)
|
72
|
+
fail NoMethodError,
|
73
|
+
"#{sandbox} must respond to #require_module because it responds to #can_require_module?" unless sandbox.respond_to? :require_module
|
74
|
+
|
75
|
+
String(sandbox.require_module(modname))
|
49
76
|
end
|
50
77
|
|
51
78
|
def getter_table(object)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transparent-lua
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.4'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Haase
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rlua
|