mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* struct.c (make_struct): remove junk ID check to allow members who
have junk name like "foo\000". * test/ruby/test_struct.rb: Test for above. [Bug #7575] [ruby-dev:46750] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
570b766901
commit
f9e621372d
3 changed files with 20 additions and 8 deletions
|
@ -1,3 +1,10 @@
|
|||
Sat Dec 22 11:30:21 2012 Masaki Matsushita <glass.saga@gmail.com>
|
||||
|
||||
* struct.c (make_struct): remove junk ID check to allow members who
|
||||
have junk name like "foo\000".
|
||||
* test/ruby/test_struct.rb: Test for above.
|
||||
[Bug #7575] [ruby-dev:46750]
|
||||
|
||||
Sat Dec 22 05:34:54 2012 Eric Hodel <drbrain@segment7.net>
|
||||
|
||||
* lib/net/http.rb: Requests may be created with a URI which sets the
|
||||
|
|
14
struct.c
14
struct.c
|
@ -207,15 +207,13 @@ make_struct(VALUE name, VALUE members, VALUE klass)
|
|||
len = RARRAY_LEN(members);
|
||||
for (i=0; i< len; i++) {
|
||||
ID id = SYM2ID(ptr_members[i]);
|
||||
if (rb_is_local_id(id) || rb_is_const_id(id)) {
|
||||
if (i < N_REF_FUNC) {
|
||||
rb_define_method_id(nstr, id, ref_func[i], 0);
|
||||
}
|
||||
else {
|
||||
rb_define_method_id(nstr, id, rb_struct_ref, 0);
|
||||
}
|
||||
rb_define_method_id(nstr, rb_id_attrset(id), rb_struct_set, 1);
|
||||
if (i < N_REF_FUNC) {
|
||||
rb_define_method_id(nstr, id, ref_func[i], 0);
|
||||
}
|
||||
else {
|
||||
rb_define_method_id(nstr, id, rb_struct_ref, 0);
|
||||
}
|
||||
rb_define_method_id(nstr, rb_id_attrset(id), rb_struct_set, 1);
|
||||
}
|
||||
|
||||
return nstr;
|
||||
|
|
|
@ -227,6 +227,13 @@ class TestStruct < Test::Unit::TestCase
|
|||
assert_equal("#<struct Struct::R\u{e9}sum\u{e9} r\u{e9}sum\u{e9}=42>", a.inspect, '[ruby-core:24849]')
|
||||
end
|
||||
|
||||
def test_junk
|
||||
struct_test = Struct.new("Foo", "a\000")
|
||||
o = struct_test.new(1)
|
||||
assert_equal(1, o.send("a\000"))
|
||||
Struct.instance_eval { remove_const(:Foo) }
|
||||
end
|
||||
|
||||
def test_comparison_when_recursive
|
||||
klass1 = Struct.new(:a, :b, :c)
|
||||
|
||||
|
|
Loading…
Reference in a new issue