Project

General

Profile

Bug #12340

Windows: File.truncate has two string encoding issues

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

Status:
Closed
Priority:
Normal
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.

Associated revisions

Revision 42ebe37b
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb: test UTF-8 filename. see [Bug #12340]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54887 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 54887
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb: test UTF-8 filename. see [Bug #12340]

Revision 54887
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb: test UTF-8 filename. see [Bug #12340]

Revision 54887
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb: test UTF-8 filename. see [Bug #12340]

Revision 54887
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb: test UTF-8 filename. see [Bug #12340]

Revision 3e5dc499
Added by usa (Usaku NAKAMURA) over 3 years ago

  • win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
    truncate alternative which accepts UTF-8 path.

  • file.c (truncate): use above function.
    [Bug #12340]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54889 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 54889
Added by usa (Usaku NAKAMURA) over 3 years ago

  • win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
    truncate alternative which accepts UTF-8 path.

  • file.c (truncate): use above function.
    [Bug #12340]

Revision 54889
Added by usa (Usaku NAKAMURA) over 3 years ago

  • win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
    truncate alternative which accepts UTF-8 path.

  • file.c (truncate): use above function.
    [Bug #12340]

Revision 54889
Added by usa (Usaku NAKAMURA) over 3 years ago

  • win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
    truncate alternative which accepts UTF-8 path.

  • file.c (truncate): use above function.
    [Bug #12340]

Revision 54889
Added by usa (Usaku NAKAMURA) over 3 years ago

  • win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
    truncate alternative which accepts UTF-8 path.

  • file.c (truncate): use above function.
    [Bug #12340]

Revision 6dbda00a
Added by usa (Usaku NAKAMURA) over 3 years ago

merge revision(s) 54887-54889: [Backport #12340]

    * win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
      truncate alternative which accepts UTF-8 path.

    * file.c (truncate): use above function.
      [Bug #12340]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@55347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 55347
Added by usa (Usaku NAKAMURA) over 3 years ago

merge revision(s) 54887-54889: [Backport #12340]

* win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
  truncate alternative which accepts UTF-8 path.

* file.c (truncate): use above function.
  [Bug #12340]

Revision 3c7a96bf
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb (test_lchmod): merge mistake of r55347. (cf. [Backport #12340])

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@55367 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 55367
Added by usa (Usaku NAKAMURA) over 3 years ago

  • test/ruby/test_file_exhaustive.rb (test_lchmod): merge mistake of r55347. (cf. [Backport #12340])

Revision 85ca853a
Added by nagachika (Tomoyuki Chikanaga) over 3 years ago

merge revision(s) 54887-54889: [Backport #12340]

    * win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
      truncate alternative which accepts UTF-8 path.

    * file.c (truncate): use above function.
      [Bug #12340]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@55400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 55400
Added by nagachika (Tomoyuki Chikanaga) over 3 years ago

merge revision(s) 54887-54889: [Backport #12340]

* win32/win32.c, include/ruby/win32.h (rb_w32_utruncate): implements new
  truncate alternative which accepts UTF-8 path.

* file.c (truncate): use above function.
  [Bug #12340]

History

#1

Updated by usa (Usaku NAKAMURA) over 3 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) over 3 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) over 3 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 3 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 3 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.

Also available in: Atom PDF