summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--string.c19
2 files changed, 21 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 2240236fc9..b9f784d8fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue Aug 12 15:37:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_intern): should check symbol table overflow.
+
Tue Aug 12 15:31:04 2008 Minero Aoki <aamine@loveruby.net>
* lib/net/http.rb (send_request_with_body): Content-Length should
diff --git a/string.c b/string.c
index e14f298cc8..ba2c454df8 100644
--- a/string.c
+++ b/string.c
@@ -5840,10 +5840,25 @@ VALUE
rb_str_intern(VALUE s)
{
VALUE str = RB_GC_GUARD(s);
- ID id;
+ VALUE sym;
+ ID id, id2;
id = rb_intern_str(str);
- return ID2SYM(id);
+ sym = ID2SYM(id);
+ id2 = SYM2ID(sym);
+ if (id != id2) {
+ char *name = rb_id2name(id2);
+
+ if (name) {
+ rb_raise(rb_eRuntimeError, "symbol table overflow (%s given for %s)",
+ name, RSTRING_PTR(str));
+ }
+ else {
+ rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %s)",
+ RSTRING_PTR(str));
+ }
+ }
+ return sym;
}