1
0
Fork 0
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:
glass 2012-12-22 02:52:48 +00:00
parent 570b766901
commit f9e621372d
3 changed files with 20 additions and 8 deletions

View file

@ -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

View file

@ -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;

View file

@ -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)