blob: f2b1de3c20934e0d3ed1cc376db76cae2ee9c4fd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
require 'test_base'
module DL
class TestHandle < TestBase
def test_to_i
handle = DL::Handle.new(LIBC_SO)
assert handle.to_i
end
def test_static_sym_secure
assert_raises(SecurityError) do
Thread.new do
$SAFE = 2
DL::Handle.sym('calloc')
end.join
end
end
def test_static_sym_unknown
assert_raises(DL::DLError) { DL::Handle.sym('fooo') }
assert_raises(DL::DLError) { DL::Handle['fooo'] }
end
def test_static_sym
assert DL::Handle.sym('dlopen')
assert_equal DL::Handle.sym('dlopen'), DL::Handle['dlopen']
end
def test_sym_closed_handle
handle = DL::Handle.new(LIBC_SO)
handle.close
assert_raises(DL::DLError) { handle.sym("calloc") }
assert_raises(DL::DLError) { handle["calloc"] }
end
def test_sym_unknown
handle = DL::Handle.new(LIBC_SO)
assert_raises(DL::DLError) { handle.sym('fooo') }
assert_raises(DL::DLError) { handle['fooo'] }
end
def test_sym_with_bad_args
handle = DL::Handle.new(LIBC_SO)
assert_raises(TypeError) { handle.sym(nil) }
assert_raises(TypeError) { handle[nil] }
end
def test_sym_secure
assert_raises(SecurityError) do
Thread.new do
$SAFE = 2
handle = DL::Handle.new(LIBC_SO)
handle.sym('calloc')
end.join
end
end
def test_sym
handle = DL::Handle.new(LIBC_SO)
assert handle.sym('calloc')
assert handle['calloc']
end
def test_handle_close
handle = DL::Handle.new(LIBC_SO)
assert_equal 0, handle.close
end
def test_handle_close_twice
handle = DL::Handle.new(LIBC_SO)
handle.close
assert_raises(DL::DLError) do
handle.close
end
end
def test_dlopen_returns_handle
assert_instance_of DL::Handle, dlopen(LIBC_SO)
end
def test_dlopen_safe
assert_raises(SecurityError) do
Thread.new do
$SAFE = 2
dlopen(LIBC_SO)
end.join
end
end
def test_initialize_safe
assert_raises(SecurityError) do
Thread.new do
$SAFE = 2
DL::Handle.new(LIBC_SO)
end.join
end
end
def test_initialize_noargs
handle = DL::Handle.new
assert handle['rb_str_new']
end
def test_initialize_flags
handle = DL::Handle.new(LIBC_SO, DL::RTLD_LAZY | DL::RTLD_GLOBAL)
assert handle['calloc']
end
def test_enable_close
handle = DL::Handle.new(LIBC_SO)
assert !handle.close_enabled?, 'close is enabled'
handle.enable_close
assert handle.close_enabled?, 'close is not enabled'
end
def test_disable_close
handle = DL::Handle.new(LIBC_SO)
handle.enable_close
assert handle.close_enabled?, 'close is enabled'
handle.disable_close
assert !handle.close_enabled?, 'close is enabled'
end
def test_NEXT
handle = DL::Handle::NEXT
assert handle['malloc']
end
def test_DEFAULT
handle = DL::Handle::DEFAULT
assert handle['malloc']
end
end
end
|