summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--encoding.c4
-rw-r--r--spec/ruby/optional/capi/encoding_spec.rb9
2 files changed, 12 insertions, 1 deletions
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