Bug #18898
Updated by javanthropus (Jeremy Bopp) almost 2 years ago
Save the following to a file and run it: ```ruby ```yaml #!/usr/bin/env ruby Encoding.default_external = 'utf-8' File.open(__FILE__) do |f| f.set_encoding('utf-8', 'invalid') printf( "default external: %p\ndefault internal: %p\nexternal: %p\ninternal: %p\n\n", Encoding.default_external, Encoding.default_internal, f.external_encoding, f.internal_encoding ) f.read end ``` The above script will result in a segfault at `f.read`. This seems to happen because the call to `#set_encoding` results in the internal encoding of the IO object being set to follow `Encoding.default_external` while also setting the external encoding of the IO object to match. Ovbiously, there shouldn't be a segfault, but I actually expected the IO object's internal encoding to be set to nil due to the invalid encoding being specified for it. I was able to reproduce this on all versions of Ruby from 2.7.0 to 3.0.2.