Bug #12340
closedWindows: File.truncate has two string encoding issues
Description
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.
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.
Updated by usa (Usaku NAKAMURA) almost 10 years ago
- Status changed from Open to Closed
Applied in changeset r54887.
- test/ruby/test_file_exhaustive.rb: test UTF-8 filename. see [Bug #12340]
Updated by usa (Usaku NAKAMURA) almost 10 years ago
- Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: WONTFIX, 2.2: REQUIRED, 2.3: REQUIRED
I can't find your attached file :-P, but I've fixed now.
Updated by cremno (cremno phobia) almost 10 years ago
Oops! The tests you've added are much more comprehensive than mine anyway. Thank you for the quick fix.
Updated by usa (Usaku NAKAMURA) over 9 years ago
- 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.
Updated by nagachika (Tomoyuki Chikanaga) over 9 years ago
- Backport changed from 2.1: WONTFIX, 2.2: DONE, 2.3: REQUIRED to 2.1: WONTFIX, 2.2: DONE, 2.3: DONE
ruby_2_3 r55400 merged revision(s) 54887-54889.