[ruby-core:75919] [Ruby trunk Bug#12340] Windows: File.truncate has two string encoding issues
From:
usa@...
Date:
2016-06-10 06:36:05 UTC
List:
ruby-core #75919
Issue #12340 has been updated by Usaku NAKAMURA. Backport changed from 2.1: WONTFIX, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: WONTFIX, 2.2: DONE, 2.3: REQUIRED ruby_2_2 r55347 merged revision(s) 54887-54889. ---------------------------------------- Bug #12340: Windows: File.truncate has two string encoding issues https://bugs.ruby-lang.org/issues/12340#change-59106 * Author: cremno phobia * Status: Closed * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: WONTFIX, 2.2: DONE, 2.3: REQUIRED ---------------------------------------- `File.truncate` calls `rb_str_encode_ospath()` which returns a UTF-8 encoded Ruby string. Then it passes a pointer to the underlying C string to `truncate()` aka `rb_w32_truncate()`. At last the UTF-8 string is passed to `CreateFile()` aka `CreateFileA()` (ANSI). This also means it doesn't support Unicode unlike (hopefully all) other File singleton methods. ~~~ruby s = "\u2603" IO.write(s, '123') File.truncate(s, 0) # Errno::ENOENT: No such file or directory @ rb_file_s_truncate - ☃ ~~~ A possible fix is attached. I'm not sure about the test code. I also couldn't find any similar tests. The actual fix should be fine however. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>