[#42344] [ruby-trunk - Feature #5964][Open] Make Symbols an Alternate Syntax for Strings — Tom Wardrop <tom@...>

23 messages 2012/02/03

[#42443] [ruby-trunk - Bug #5985][Open] miniruby skews "make benchmark" results — Eric Wong <normalperson@...>

21 messages 2012/02/08

[#42444] [ruby-trunk - Bug #5986][Open] Segmentation Fault — Luis Matta <levmatta@...>

16 messages 2012/02/08

[#42471] [ruby-trunk - Feature #5995][Open] calling io_advise_internal() in read_all() — Masaki Matsushita <glass.saga@...>

20 messages 2012/02/10

[#42560] [ruby-trunk - Bug #6011][Open] ruby-1.9.3-p0/lib/webrick/utils.rb:184: [BUG] Segmentation fault — Vit Ondruch <v.ondruch@...>

12 messages 2012/02/13

[#42579] [ruby-trunk - Bug #6012][Open] Proc#source_location also return the column — Roger Pack <rogerpack2005@...>

14 messages 2012/02/14

[#42685] [ruby-trunk - Bug #6036][Open] Test failures in Fedora Rawhide/17 — Bohuslav Kabrda <bkabrda@...>

14 messages 2012/02/16

[#42697] [ruby-trunk - Bug #6040][Open] Transcoding test failure: Big5 to UTF8 not defined (MinGW) — Luis Lavena <luislavena@...>

10 messages 2012/02/16

[#42813] [ruby-trunk - Feature #6065][Open] Allow Bignum marshalling/unmarshalling from C API — Martin Bosslet <Martin.Bosslet@...>

22 messages 2012/02/23

[#42815] [ruby-trunk - Bug #6066][Open] Fix "control may reach end of non-void function" warnings for clang — Eric Hodel <drbrain@...7.net>

15 messages 2012/02/23

[#42857] [ruby-trunk - Feature #6074][Open] Allow alias arguments to have a comma — Thomas Sawyer <transfire@...>

20 messages 2012/02/24

[#42891] [ruby-trunk - Feature #6083][Open] Hide a Bignum definition — Koichi Sasada <redmine@...>

23 messages 2012/02/25

[#42906] [ruby-trunk - Bug #6085][Open] Treatment of Wrong Number of Arguments — Marc-Andre Lafortune <ruby-core@...>

14 messages 2012/02/25

[#42949] [ruby-trunk - Bug #6089][Open] Test suite fails with OpenSSL 1.0.1 — Vit Ondruch <v.ondruch@...>

13 messages 2012/02/26

[ruby-core:43022] [ruby-trunk - Bug #5297] Either File.expand_path or File.join is corrupting string encoding

From: Patrick Bennett <patrick@...>
Date: 2012-02-29 18:13:05 UTC
List: ruby-core #43022
Issue #5297 has been updated by Patrick Bennett.


With ruby 1.9.3p125 (2012-02-16) [i386-mingw32] File.join always converts to ASCII-8BIT for me no matter the encoding passed to it.
So, using your irb example up through the File.join
irb(main):001:0> a = File.expand_path "."
=> "d:/test-streams"
irb(main):002:0> a.encoding
=> #<Encoding:Windows-1252>
irb(main):003:0> b = Dir.glob("../*")[1]
=> "../2dot4DSTree.reg"
irb(main):004:0> b.encoding
=> #<Encoding:IBM437>
irb(main):005:0> c = File.expand_path b
=> "d:/2dot4DSTree.reg"
irb(main):006:0> c.encoding
=> #<Encoding:Windows-1252>
irb(main):007:0> d = File.join(a, "foo")
=> "d:/test-streams/foo"
irb(main):008:0> d.encoding
=> #<Encoding:ASCII-8BIT>
irb(main):009:0> File.join('foo','bar').encoding
=> #<Encoding:ASCII-8BIT>

The result is the same regardless of my default external codepage - if I change it to 1252 as you have it then b's encoding returns as 1252 instead of 437 (my default) but File.join still returns as ascii-8bit.  The fact that we;re apparently using the same ruby version is a little troubling though.
----------------------------------------
Bug #5297: Either File.expand_path or File.join is corrupting string encoding
https://bugs.ruby-lang.org/issues/5297

Author: Luis Lavena
Status: Closed
Priority: Normal
Assignee: Usaku NAKAMURA
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.4dev (2011-09-07 trunk 33212) [i386-mingw32]


Hello,

While working on some API improvements for Windows, found the following issue:

https://gist.github.com/1202366

<pre>
V:\f坦単竪>ruby -v
ruby 1.9.4dev (2011-09-07 trunk 33212) [i386-mingw32]

V:\f坦単竪>chcp 1252
Active code page: 1252

V:\f坦単竪>ruby -e "puts Encoding.default_external"
Windows-1252

V:\f坦単竪>irb
irb(main):001:0> a = File.expand_path "."
=> "V:/f坦単竪"
irb(main):002:0> a.encoding
=> #<Encoding:Windows-1252>
irb(main):003:0> b = Dir.glob("../*").first
=> "../f坦単竪"
irb(main):004:0> b.encoding
=> #<Encoding:Windows-1252>
irb(main):005:0> File.expand_path b
=> "V:/f坦単竪"
irb(main):006:0> c = File.expand_path b
=> "V:/f坦単竪"
irb(main):007:0> c.encoding
=> #<Encoding:Windows-1252>
irb(main):008:0> d = File.join(a, "foo")
=> "V:/f\xF3\xF1\xE8/foo"
irb(main):009:0> d.encoding
=> #<Encoding:ASCII-8BIT>                          # <= FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
irb(main):010:0> e = "#{a}/foo"
=> "V:/f坦単竪/foo"
irb(main):011:0> e.encoding
=> #<Encoding:Windows-1252>
irb(main):012:0> File.open(d, "w+") { |f| f.puts "hi" }
Errno::ENOENT: No such file or directory - V:/f坦単竪/foo       # <= W.T.F.????
        from (irb):12:in `initialize'
        from (irb):12:in `open'
        from (irb):12
        from C:/Users/Luis/Tools/Ruby/ruby-head-i386-mingw32/bin/irb:12:in `<main>'
irb(main):013:0> File.open(e, "w+") { |f| f.puts "hi" }
Errno::ENOENT: No such file or directory - V:/f坦単竪/foo       # <= W.T.F. * 20!
        from (irb):13:in `initialize'
        from (irb):13:in `open'
        from (irb):13
        from C:/Users/Luis/Tools/Ruby/ruby-head-i386-mingw32/bin/irb:12:in `<main>'
irb(main):014:0>
</pre>

It is not clear why while File.expand_path worked, File.join broke but string interpolation didn't.

Even worse is that File.open failed.

I'm working on a replacement function for expand_path that rely on MultiByteToWideChar + GetFullPathNameW + WideCharToMultiByte and then uses rb_filesystem_str_new_cstr to return the string.

The funny fact is that replacement work properly:

<pre>
C:\Users\Luis\Projects\oss\me\fenix>ripl -Ilib
>> require "fenix"
=> true
>> Dir.chdir "V:"
=> 0
>> Dir.pwd
=> "V:/f坦単竪"
>> c = Fenix::File.expand_path "."
=> "V:/f坦単竪"
>> c.encoding
=> #<Encoding:Windows-1252>
>> File.join(c, "foo").encoding
=> #<Encoding:Windows-1252>
>> d = "#{c}/foo"
=> "V:/f坦単竪/foo"
>> d.encoding
=> #<Encoding:Windows-1252>
>> File.open(d, "w") { |f| f.puts "hi" }
=> nil
</pre>



-- 
http://bugs.ruby-lang.org/

In This Thread