From bf794afbf90ca3041f1046fdb10863dc049c9786 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 5 Feb 2011 01:09:39 +0000 Subject: [PATCH] * load.c (rb_get_expanded_load_path): always expand load paths. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30789 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ load.c | 8 -------- test/ruby/test_autoload.rb | 25 +++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76a67e531a..2732d0722e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat Feb 5 10:09:31 2011 Nobuyoshi Nakada + + * load.c (rb_get_expanded_load_path): always expand load paths. + Sat Feb 5 09:38:08 2011 Nobuyoshi Nakada * transcode.c (encoded_dup): extract. diff --git a/load.c b/load.c index 185d6e0c39..5e6b9d0d55 100644 --- a/load.c +++ b/load.c @@ -48,14 +48,6 @@ rb_get_expanded_load_path(void) VALUE ary; long i; - for (i = 0; i < RARRAY_LEN(load_path); ++i) { - VALUE str = rb_check_string_type(RARRAY_PTR(load_path)[i]); - if (NIL_P(str) || !rb_is_absolute_path(RSTRING_PTR(str))) - goto relative_path_found; - } - return load_path; - - relative_path_found: ary = rb_ary_new2(RARRAY_LEN(load_path)); for (i = 0; i < RARRAY_LEN(load_path); ++i) { VALUE path = rb_file_expand_path(RARRAY_PTR(load_path)[i], Qnil); diff --git a/test/ruby/test_autoload.rb b/test/ruby/test_autoload.rb index c2039086cf..eeedc7d988 100644 --- a/test/ruby/test_autoload.rb +++ b/test/ruby/test_autoload.rb @@ -9,4 +9,29 @@ class TestAutoload < Test::Unit::TestCase begin Continuation; rescue LoadError; end INPUT end + + def test_non_realpath_in_loadpath + require 'tmpdir' + tmpdir = Dir.mktmpdir('autoload') + tmpdirs = [tmpdir] + tmpdirs.unshift(tmpdir + '/foo') + Dir.mkdir(tmpdirs[0]) + tmpfiles = [tmpdir + '/foo.rb', tmpdir + '/foo/bar.rb'] + open(tmpfiles[0] , 'w') do |f| + f.puts <<-INPUT +$:.unshift(File.expand_path('..', __FILE__)+'/./foo') +module Foo + autoload :Bar, 'bar' +end +Foo::Bar + INPUT + end + open(tmpfiles[1], 'w') do |f| + f.puts 'class Foo::Bar; end' + end + assert_in_out_err([tmpfiles[0]], "", [], []) + ensure + File.unlink(*tmpfiles) rescue nil if tmpfiles + tmpdirs.each {|dir| Dir.rmdir(dir)} + end end