From 080d700e1d79e9f370d74825cd1392cf61b404bf Mon Sep 17 00:00:00 2001 From: eregon Date: Fri, 3 Aug 2018 13:52:13 +0000 Subject: [PATCH] encoding.c (enc_set_index): raise instead of rb_bug() for non-encoding capable objects * Add spec. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64172 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- encoding.c | 4 +++- spec/ruby/optional/capi/encoding_spec.rb | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/encoding.c b/encoding.c index 8d1894aa91..eac4d7c50a 100644 --- a/encoding.c +++ b/encoding.c @@ -819,7 +819,9 @@ rb_enc_get_index(VALUE obj) static void enc_set_index(VALUE obj, int idx) { - if (!enc_capable(obj)) rb_bug("enc_set_index: not capable object"); + if (!enc_capable(obj)) { + rb_raise(rb_eArgError, "cannot set encoding on non-encoding capable object"); + } if (idx < ENCODING_INLINE_MAX) { ENCODING_SET_INLINED(obj, idx); diff --git a/spec/ruby/optional/capi/encoding_spec.rb b/spec/ruby/optional/capi/encoding_spec.rb index dc1019e8ae..7661f2b68b 100644 --- a/spec/ruby/optional/capi/encoding_spec.rb +++ b/spec/ruby/optional/capi/encoding_spec.rb @@ -30,6 +30,15 @@ describe :rb_enc_set_index, shared: true do result = @s.send(@method, str, 1) result.first.should == result.last end + + ruby_version_is "2.6" do + it "raises an ArgumentError for a non-encoding capable object" do + obj = Object.new + -> { + result = @s.send(@method, obj, 1) + }.should raise_error(ArgumentError, "cannot set encoding on non-encoding capable object") + end + end end describe "C-API Encoding function" do