Skip to content

Commit 18d6fb6

Browse files
jeremyevanskou
authored andcommitted
Remove taint support (#21)
Ruby 2.7 deprecates taint and it no longer has an effect. The lack of taint support should not cause a problem in previous Ruby versions.
1 parent c49cc79 commit 18d6fb6

File tree

7 files changed

+9
-58
lines changed

7 files changed

+9
-58
lines changed

ext/fiddle/function.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,6 @@ function_call(int argc, VALUE argv[], VALUE self)
184184

185185
TypedData_Get_Struct(self, ffi_cif, &function_data_type, args.cif);
186186

187-
if (rb_safe_level() >= 1) {
188-
for (i = 0; i < argc; i++) {
189-
VALUE src = argv[i];
190-
if (OBJ_TAINTED(src)) {
191-
rb_raise(rb_eSecurityError, "tainted parameter not allowed");
192-
}
193-
}
194-
}
195-
196187
generic_args = ALLOCV(alloc_buffer,
197188
(size_t)(argc + 1) * sizeof(void *) + (size_t)argc * sizeof(fiddle_generic));
198189
args.values = (void **)((char *)generic_args +

ext/fiddle/handle.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#include <ruby.h>
22
#include <fiddle.h>
33

4-
#define SafeStringValueCStr(v) (rb_check_safe_obj(rb_string_value(&v)), StringValueCStr(v))
5-
64
VALUE rb_cHandle;
75

86
struct dl_handle {
@@ -145,11 +143,11 @@ rb_fiddle_handle_initialize(int argc, VALUE argv[], VALUE self)
145143
cflag = RTLD_LAZY | RTLD_GLOBAL;
146144
break;
147145
case 1:
148-
clib = NIL_P(lib) ? NULL : SafeStringValueCStr(lib);
146+
clib = NIL_P(lib) ? NULL : StringValueCStr(lib);
149147
cflag = RTLD_LAZY | RTLD_GLOBAL;
150148
break;
151149
case 2:
152-
clib = NIL_P(lib) ? NULL : SafeStringValueCStr(lib);
150+
clib = NIL_P(lib) ? NULL : StringValueCStr(lib);
153151
cflag = NUM2INT(flag);
154152
break;
155153
default:
@@ -319,7 +317,7 @@ fiddle_handle_sym(void *handle, VALUE symbol)
319317
# define CHECK_DLERROR
320318
#endif
321319
void (*func)();
322-
const char *name = SafeStringValueCStr(symbol);
320+
const char *name = StringValueCStr(symbol);
323321

324322
#ifdef HAVE_DLERROR
325323
dlerror();

ext/fiddle/pointer.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ rb_fiddle_ptr_new2(VALUE klass, void *ptr, long size, freefunc_t func)
9090
data->ptr = ptr;
9191
data->free = func;
9292
data->size = size;
93-
OBJ_TAINT(val);
9493

9594
return val;
9695
}
@@ -376,11 +375,11 @@ rb_fiddle_ptr_to_s(int argc, VALUE argv[], VALUE self)
376375
TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data);
377376
switch (rb_scan_args(argc, argv, "01", &arg1)) {
378377
case 0:
379-
val = rb_tainted_str_new2((char*)(data->ptr));
378+
val = rb_str_new2((char*)(data->ptr));
380379
break;
381380
case 1:
382381
len = NUM2INT(arg1);
383-
val = rb_tainted_str_new((char*)(data->ptr), len);
382+
val = rb_str_new((char*)(data->ptr), len);
384383
break;
385384
default:
386385
rb_bug("rb_fiddle_ptr_to_s");
@@ -414,11 +413,11 @@ rb_fiddle_ptr_to_str(int argc, VALUE argv[], VALUE self)
414413
TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data);
415414
switch (rb_scan_args(argc, argv, "01", &arg1)) {
416415
case 0:
417-
val = rb_tainted_str_new((char*)(data->ptr),data->size);
416+
val = rb_str_new((char*)(data->ptr),data->size);
418417
break;
419418
case 1:
420419
len = NUM2INT(arg1);
421-
val = rb_tainted_str_new((char*)(data->ptr), len);
420+
val = rb_str_new((char*)(data->ptr), len);
422421
break;
423422
default:
424423
rb_bug("rb_fiddle_ptr_to_str");
@@ -551,7 +550,7 @@ rb_fiddle_ptr_aref(int argc, VALUE argv[], VALUE self)
551550
case 2:
552551
offset = NUM2ULONG(arg0);
553552
len = NUM2ULONG(arg1);
554-
retval = rb_tainted_str_new((char *)data->ptr + offset, len);
553+
retval = rb_str_new((char *)data->ptr + offset, len);
555554
break;
556555
default:
557556
rb_bug("rb_fiddle_ptr_aref()");
@@ -669,7 +668,6 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val)
669668
if (num == val) wrap = 0;
670669
ptr = rb_fiddle_ptr_new(NUM2PTR(num), 0, NULL);
671670
}
672-
OBJ_INFECT(ptr, val);
673671
if (wrap) RPTR_DATA(ptr)->wrap[0] = wrap;
674672
return ptr;
675673
}

test/fiddle/test_func.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,6 @@ def test_random
1111
assert_nil f.call(10)
1212
end
1313

14-
def test_syscall_with_tainted_string
15-
f = Function.new(@libc['system'], [TYPE_VOIDP], TYPE_INT)
16-
Thread.new {
17-
$SAFE = 1
18-
assert_raise(SecurityError) do
19-
f.call("uname -rs".dup.taint)
20-
end
21-
}.join
22-
ensure
23-
$SAFE = 0
24-
end
25-
2614
def test_sinf
2715
begin
2816
f = Function.new(@libm['sinf'], [TYPE_FLOAT], TYPE_FLOAT)

test/fiddle/test_function.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def test_nogvl_poll
9898
end
9999

100100
def test_no_memory_leak
101-
prep = 'r = Fiddle::Function.new(Fiddle.dlopen(nil)["rb_obj_tainted"], [Fiddle::TYPE_UINTPTR_T], Fiddle::TYPE_UINTPTR_T); a = "a"'
101+
prep = 'r = Fiddle::Function.new(Fiddle.dlopen(nil)["rb_obj_frozen"], [Fiddle::TYPE_UINTPTR_T], Fiddle::TYPE_UINTPTR_T); a = "a"'
102102
code = 'begin r.call(a); rescue TypeError; end'
103103
assert_no_memory_leak(%w[-W0 -rfiddle], "#{prep}\n1000.times{#{code}}", "10_000.times {#{code}}", limit: 1.2)
104104
end

test/fiddle/test_handle.rb

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,6 @@ module Fiddle
88
class TestHandle < TestCase
99
include Fiddle
1010

11-
def test_safe_handle_open
12-
Thread.new do
13-
$SAFE = 1
14-
assert_raise(SecurityError) {
15-
Fiddle::Handle.new(LIBC_SO.dup.taint)
16-
}
17-
end.join
18-
ensure
19-
$SAFE = 0
20-
end
21-
22-
def test_safe_function_lookup
23-
Thread.new do
24-
h = Fiddle::Handle.new(LIBC_SO)
25-
$SAFE = 1
26-
assert_raise(SecurityError) {
27-
h["qsort".dup.taint]
28-
}
29-
end.join
30-
ensure
31-
$SAFE = 0
32-
end
33-
3411
def test_to_i
3512
handle = Fiddle::Handle.new(LIBC_SO)
3613
assert_kind_of Integer, handle.to_i

test/fiddle/test_pointer.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ def test_inspect
7979
def test_to_ptr_string
8080
str = "hello world"
8181
ptr = Pointer[str]
82-
assert ptr.tainted?, 'pointer should be tainted'
8382
assert_equal str.length, ptr.size
8483
assert_equal 'hello', ptr[0,5]
8584
end

0 commit comments

Comments
 (0)