From a1ab2bc8a4900249798cf6da3409c38c2da501f4 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 3 Oct 2010 09:30:30 +0000 Subject: [PATCH] * parse.y (rb_intern): should check symbol table overflow. #3900 [ruby-dev:42330] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@29396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ parse.y | 10 ++++++++++ version.h | 6 +++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 67a2952ae6..0dcef00a17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Oct 3 18:30:23 2010 Nobuyoshi Nakada + + * parse.y (rb_intern): should check symbol table overflow. + #3900 [ruby-dev:42330] + Fri Oct 1 16:54:19 2010 Nobuyoshi Nakada * lib/rdoc/ri/ri_paths.rb (RI::Paths): use RbConfig instead of diff --git a/parse.y b/parse.y index 0dcc554e51..4d96b8fd17 100644 --- a/parse.y +++ b/parse.y @@ -6227,6 +6227,16 @@ rb_intern(name) } if (*m) id = ID_JUNK; new_id: + if (last_id >= SYM2ID(~(VALUE)0) >> ID_SCOPE_SHIFT) { + if (last > 20) { + rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)", + name); + } + else { + rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)", + last, name); + } + } id |= ++last_id << ID_SCOPE_SHIFT; id_regist: name = strdup(name); diff --git a/version.h b/version.h index cf25b92ef1..8d73a47056 100644 --- a/version.h +++ b/version.h @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.8" -#define RUBY_RELEASE_DATE "2010-10-01" +#define RUBY_RELEASE_DATE "2010-10-03" #define RUBY_VERSION_CODE 188 -#define RUBY_RELEASE_CODE 20101001 +#define RUBY_RELEASE_CODE 20101003 #define RUBY_PATCHLEVEL -1 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 8 #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 10 -#define RUBY_RELEASE_DAY 1 +#define RUBY_RELEASE_DAY 3 #define NO_STRING_LITERAL_CONCATENATION 1 #ifdef RUBY_EXTERN