Bug #9699
closedCannot require .so file on Windows if the file path is unicode (Includes patch)
Description
It doesn't seem possible to load a C extension that is inside a non-ascii path.
To reproduce:
- Extract the attached zip file (with a decent unzip program such as 7-zip, that preserves unicode paths)
- cd to where you extracted
- launch irb
- require './foo.rb' (All this does is require a simple so file inside the folder 'てすと')
- You'll see a failure
The culprit is in function dln_load, it uses the ANSI version of LoadLibrary and passes in the char* path given to the function. My patch converts it to wide char and uses LoadLibraryW. I have assumed that the given path is UTF-8 encoded, which seems to work but I am not sure if this is a safe assumption.
I hope the patch is in the right format, I wasn't sure. Thanks for your time!
Bugra
Files
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r45523.
dln.c: non-ascii path on Windows
- dln.c (dln_load): use wchar version to load a library in
non-ascii path on Windows. based on the patch by Bugra Barin
in [ruby-core:61845]. [Bug #9699]
Updated by thomthom (Thomas Thomassen) over 10 years ago
Can this patch be back ported to Ruby 2.1 or 2.0?
Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED
[for branch maintainers]
r45523 depends on a new function introduced at r45521.
And test script was fixed at r45551.
Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago
- Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE
r45521, r45523 and r45551 were backported into ruby_2_1
at r46450.
Updated by usa (Usaku NAKAMURA) over 10 years ago
- Related to Bug #8676: ruby 2.0 can not require or load the source file with non-ascii path name added
Updated by usa (Usaku NAKAMURA) over 10 years ago
memo:
this fix requires at least r42183 (see #8676) for ruby_2_0_0
.