Issue #7168 has been updated by aparker42 (Andrew Parker).


I don't see how that patch fixes the issue to achieve the behavior that I expected. It looks like it will just raise an explicit error instead of the ArgumentError.

For systems that have multi-byte, fixed-size encodings how is this supposed to work?
----------------------------------------
Bug #7168: File.join trips over string encodings
https://bugs.ruby-lang.org/issues/7168#change-30893

Author: aparker42 (Andrew Parker)
Status: Closed
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]


It seems like `File.join` is unable to handle string encodings that contain null bytes even though the string is properly encoded. This causes it to be unable to process inputs when the filenames on the system are encoded in this manner.

From an irb session:

    1.9.3p125 :013 > File.join("a".encode("UTF-16LE")).encoding
     => #<Encoding:UTF-16LE> 
    1.9.3p125 :014 > File.join("a".encode("UTF-16LE"), "".encode("UTF-16LE"))
    ArgumentError: string contains null byte
	from (irb):14:in `join'
	from (irb):14
	from /Users/andy/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'

I would expect the second command in that session to return "a/" just like `File.join("a", "")` does, but with the UTF-16LE encoding.

See <https://groups.google.com/forum/?hl=en&fromgroups=#!topic/puppet-dev/C1YODJxd9Ws> for where this came from.



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