Project

General

Profile

Actions

Bug #12340

closed

Windows: File.truncate has two string encoding issues

Added by cremno (cremno phobia) over 8 years ago. Updated over 8 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:75304]

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0