From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS43350 77.247.176.0/21 X-Spam-Status: No, score=-1.5 required=3.0 tests=AWL,BAYES_00, RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_XBL shortcircuit=no autolearn=no version=3.3.2 X-Original-To: spew@80x24.org Received: from 80x24.org (politkovskaja.torservers.net [77.247.181.165]) by dcvr.yhbt.net (Postfix) with ESMTP id 4D7011F42E for ; Sun, 7 Feb 2016 23:21:22 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH] string.c (rb_external_str_with_enc): fall back to ASCII-8BIT Date: Sun, 7 Feb 2016 23:21:16 +0000 Message-Id: <20160207232116.15467-1-e@80x24.org> List-Id: Fall back to returning ASCII-8BIT instead of returning invalid strings for things like Dir.entries. --- string.c | 4 ++++ test/ruby/test_dir_m17n.rb | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/string.c b/string.c index e4a02eb..e390dfc 100644 --- a/string.c +++ b/string.c @@ -958,6 +958,10 @@ rb_external_str_with_enc(VALUE str, rb_encoding *eenc) return str; } rb_enc_associate(str, eenc); + if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) { + rb_enc_associate(str, rb_ascii8bit_encoding()); + return str; + } return rb_str_conv_enc(str, eenc, rb_default_internal_encoding()); } diff --git a/test/ruby/test_dir_m17n.rb b/test/ruby/test_dir_m17n.rb index febfbc0..db5ac58 100644 --- a/test/ruby/test_dir_m17n.rb +++ b/test/ruby/test_dir_m17n.rb @@ -72,7 +72,8 @@ def test_filename_extutf8_invalid opts = {:encoding => Encoding.default_external} if /mswin|mingw/ =~ RUBY_PLATFORM ents = Dir.entries(".", opts) filename = "%FF" if /darwin/ =~ RUBY_PLATFORM && ents.include?("%FF") - assert_include(ents, filename) + assert_include(ents, filename.b) + ents.each { |f| assert_predicate f, :valid_encoding? } EOS } end unless /mswin|mingw/ =~ RUBY_PLATFORM -- EW