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