From 70973af1d577756bd7b6dc236f3f2d53d9cfdd25 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 10 Aug 2013 00:12:05 +0000 Subject: parse.y: check for attr * parse.y (rb_id_attrset): check if the argument is valid type as an attribute. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ parse.y | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9994504006..3d3f6a8eae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Aug 10 09:12:01 2013 Nobuyoshi Nakada + + * parse.y (rb_id_attrset): check if the argument is valid type as an + attribute. + Sat Aug 10 05:44:08 2013 Zachary Scott * lib/rss/trackback.rb: [DOC] Hide RSS::Trackback from rdoc diff --git a/parse.y b/parse.y index f392be7bfa..8a31a74158 100644 --- a/parse.y +++ b/parse.y @@ -8766,9 +8766,31 @@ block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2) } } +static const char id_type_names[][9] = { + "LOCAL", + "INSTANCE", + "", /* INSTANCE2 */ + "GLOBAL", + "ATTRSET", + "CONST", + "CLASS", + "JUNK", +}; + ID rb_id_attrset(ID id) { + if (!is_notop_id(id)) { + rb_bug("rb_id_attrset: operator ID - %"PRIdVALUE, (VALUE)id); + } + else { + int scope = (int)(id & ID_SCOPE_MASK); + if (scope != ID_LOCAL && scope != ID_CONST) { + rb_bug("rb_id_attrset: %s ID - %"PRIdVALUE, id_type_names[scope], + (VALUE)id); + + } + } id &= ~ID_SCOPE_MASK; id |= ID_ATTRSET; return id; -- cgit v1.2.3