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>
|
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
|
* 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);
|
len = RARRAY_LEN(members);
|
||||||
for (i=0; i< len; i++) {
|
for (i=0; i< len; i++) {
|
||||||
ID id = SYM2ID(ptr_members[i]);
|
ID id = SYM2ID(ptr_members[i]);
|
||||||
if (rb_is_local_id(id) || rb_is_const_id(id)) {
|
if (i < N_REF_FUNC) {
|
||||||
if (i < N_REF_FUNC) {
|
rb_define_method_id(nstr, id, ref_func[i], 0);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
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;
|
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]')
|
assert_equal("#<struct Struct::R\u{e9}sum\u{e9} r\u{e9}sum\u{e9}=42>", a.inspect, '[ruby-core:24849]')
|
||||||
end
|
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
|
def test_comparison_when_recursive
|
||||||
klass1 = Struct.new(:a, :b, :c)
|
klass1 = Struct.new(:a, :b, :c)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue