diff options
author | NARUSE, Yui <naruse@airemix.jp> | 2021-04-02 16:06:31 +0900 |
---|---|---|
committer | NARUSE, Yui <naruse@airemix.jp> | 2021-04-02 16:06:31 +0900 |
commit | 4e2738f477b5343a0d48a400c975220fed123c9b (patch) | |
tree | de0b2bc713498c3a26c3f4dac5fa0daee58b8bc5 /ext/-test- | |
parent | 855401da495117fcf5d258fe43b71010abc43d9a (diff) |
merge revision(s) 7e8a9af9db42a21f6a1125a29e98c45ff9d5833b: [Backport #17732]
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
---
encoding.c | 28 ++++++++++++----------------
ext/-test-/string/depend | 3 +++
ext/-test-/string/fstring.c | 15 +++++++++++++++
internal/encoding.h | 3 +++
string.c | 4 ++++
test/-ext-/string/test_fstring.rb | 16 ++++++++++++++++
6 files changed, 53 insertions(+), 16 deletions(-)
Diffstat (limited to 'ext/-test-')
-rw-r--r-- | ext/-test-/string/depend | 3 | ||||
-rw-r--r-- | ext/-test-/string/fstring.c | 15 |
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); } |