summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c19
1 files changed, 17 insertions, 2 deletions
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;
}