summaryrefslogtreecommitdiff
path: root/ext/-test-
diff options
context:
space:
mode:
authorJean Boussier <jean.boussier@gmail.com>2021-03-19 11:29:06 +0100
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-03-22 21:37:48 +0900
commit7e8a9af9db42a21f6a1125a29e98c45ff9d5833b (patch)
tree67c6fe4c12f8d4fdc8365a33ebee6bc37750c157 /ext/-test-
parent5b272a645322c2ffe0f73c523d64832678d0de5f (diff)
rb_enc_interned_str: handle autoloaded encodings
If called with an autoloaded encoding that was not yet initialized, `rb_enc_interned_str` would crash with a NULL pointer exception. See: https://github.com/ruby/ruby/pull/4119#issuecomment-800189841
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4290
Diffstat (limited to 'ext/-test-')
-rw-r--r--ext/-test-/string/depend3
-rw-r--r--ext/-test-/string/fstring.c15
2 files changed, 18 insertions, 0 deletions
diff --git a/ext/-test-/string/depend b/ext/-test-/string/depend
index 67dfd2289f..7db4465bf9 100644
--- a/ext/-test-/string/depend
+++ b/ext/-test-/string/depend
@@ -1000,6 +1000,7 @@ fstring.o: $(hdrdir)/ruby/backward/2/long_long.h
fstring.o: $(hdrdir)/ruby/backward/2/stdalign.h
fstring.o: $(hdrdir)/ruby/backward/2/stdarg.h
fstring.o: $(hdrdir)/ruby/defines.h
+fstring.o: $(hdrdir)/ruby/encoding.h
fstring.o: $(hdrdir)/ruby/intern.h
fstring.o: $(hdrdir)/ruby/internal/anyargs.h
fstring.o: $(hdrdir)/ruby/internal/arithmetic.h
@@ -1142,6 +1143,8 @@ fstring.o: $(hdrdir)/ruby/internal/variable.h
fstring.o: $(hdrdir)/ruby/internal/warning_push.h
fstring.o: $(hdrdir)/ruby/internal/xmalloc.h
fstring.o: $(hdrdir)/ruby/missing.h
+fstring.o: $(hdrdir)/ruby/onigmo.h
+fstring.o: $(hdrdir)/ruby/oniguruma.h
fstring.o: $(hdrdir)/ruby/ruby.h
fstring.o: $(hdrdir)/ruby/st.h
fstring.o: $(hdrdir)/ruby/subst.h
diff --git a/ext/-test-/string/fstring.c b/ext/-test-/string/fstring.c
index 30120b42f6..2374319fe3 100644
--- a/ext/-test-/string/fstring.c
+++ b/ext/-test-/string/fstring.c
@@ -1,4 +1,5 @@
#include "ruby.h"
+#include "ruby/encoding.h"
VALUE rb_fstring(VALUE str);
@@ -8,8 +9,22 @@ bug_s_fstring(VALUE self, VALUE str)
return rb_fstring(str);
}
+VALUE
+bug_s_rb_enc_interned_str(VALUE self, VALUE encoding)
+{
+ return rb_enc_interned_str("foo", 3, RDATA(encoding)->data);
+}
+
+VALUE
+bug_s_rb_enc_str_new(VALUE self, VALUE encoding)
+{
+ return rb_enc_str_new("foo", 3, RDATA(encoding)->data);
+}
+
void
Init_string_fstring(VALUE klass)
{
rb_define_singleton_method(klass, "fstring", bug_s_fstring, 1);
+ rb_define_singleton_method(klass, "rb_enc_interned_str", bug_s_rb_enc_interned_str, 1);
+ rb_define_singleton_method(klass, "rb_enc_str_new", bug_s_rb_enc_str_new, 1);
}