diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-07-05 10:01:06 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2019-08-29 08:17:43 -0700 |
commit | e51dca2596db9567bd4d698b18b4d300575d3881 (patch) | |
tree | f04771880ddb471d34ed063d90fa04619f945571 | |
parent | 01b723ba6dd48a0954765e43cff6bd9212afe259 (diff) |
Disallow use of attrset symbols as Struct members
Fixes [Bug #11326]
-rw-r--r-- | struct.c | 3 | ||||
-rw-r--r-- | test/ruby/test_struct.rb | 4 |
2 files changed, 7 insertions, 0 deletions
@@ -551,6 +551,9 @@ rb_struct_s_def(int argc, VALUE *argv, VALUE klass) tbl = RHASH_TBL(rest); for (i=0; i<argc; i++) { VALUE mem = rb_to_symbol(argv[i]); + if (rb_is_attrset_sym(mem)) { + rb_raise(rb_eArgError, "invalid struct member: %"PRIsVALUE, mem); + } if (st_insert(tbl, mem, Qtrue)) { rb_raise(rb_eArgError, "duplicate member: %"PRIsVALUE, mem); } diff --git a/test/ruby/test_struct.rb b/test/ruby/test_struct.rb index db3d767edd..502affef07 100644 --- a/test/ruby/test_struct.rb +++ b/test/ruby/test_struct.rb @@ -60,6 +60,10 @@ module TestStruct assert_equal(1, o.a) end + def test_attrset_id + assert_raise(ArgumentError) { Struct.new(:x=) } + end + def test_members klass = @Struct.new(:a) o = klass.new(1) |