Unverified Commit b60d6c42 authored by Clayton Smith's avatar Clayton Smith Committed by Bouke van der Bijl

Don't allow array parameter in Struct.new

parent a630c4f4
...@@ -273,15 +273,6 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) ...@@ -273,15 +273,6 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
} }
else { else {
if (argc > 0) name = argv[0]; if (argc > 0) name = argv[0];
if (argc > 1) rest = argv[1];
if (mrb_array_p(rest)) {
if (!mrb_nil_p(name) && mrb_symbol_p(name)) {
/* 1stArgument:symbol -> name=nil rest=argv[0]-[n] */
mrb_ary_unshift(mrb, rest, name);
name = mrb_nil_value();
}
}
else {
pargv = &argv[1]; pargv = &argv[1];
argcnt = argc-1; argcnt = argc-1;
if (!mrb_nil_p(name) && mrb_symbol_p(name)) { if (!mrb_nil_p(name) && mrb_symbol_p(name)) {
...@@ -291,7 +282,6 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass) ...@@ -291,7 +282,6 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
argcnt++; argcnt++;
} }
rest = mrb_ary_new_from_values(mrb, argcnt, pargv); rest = mrb_ary_new_from_values(mrb, argcnt, pargv);
}
for (i=0; i<RARRAY_LEN(rest); i++) { for (i=0; i<RARRAY_LEN(rest); i++) {
id = mrb_obj_to_sym(mrb, RARRAY_PTR(rest)[i]); id = mrb_obj_to_sym(mrb, RARRAY_PTR(rest)[i]);
mrb_ary_set(mrb, rest, i, mrb_symbol_value(id)); mrb_ary_set(mrb, rest, i, mrb_symbol_value(id));
......
...@@ -158,3 +158,9 @@ assert("Struct#dig") do ...@@ -158,3 +158,9 @@ assert("Struct#dig") do
assert_equal 1, a.dig(:purple, :red) assert_equal 1, a.dig(:purple, :red)
assert_equal 1, a.dig(1, 0) assert_equal 1, a.dig(1, 0)
end end
assert("Struct.new does not allow array") do
assert_raise(TypeError) do
Struct.new("Test", [:a])
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment