summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-27 08:33:47 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-27 08:33:47 +0000
commit14f6c8ca8ae785b14718cac1ad8891ca20e604e1 (patch)
treef32fe054b7581efa21879d9863fd5a6daf4656f8
parent75b9218f25f4f63bf23fdc118eb40c5d712684ee (diff)
rbinstall.rb: reject empty files
* tool/rbinstall.rb (install_recursive): add maxdepth option. * tool/rbinstall.rb (bin-comm): limit depth of bindir and reject empty files. [ruby-core:55101] [Bug #8432] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40956 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rwxr-xr-xtool/rbinstall.rb10
2 files changed, 14 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d400692113..7ce749e112 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon May 27 17:33:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (install_recursive): add maxdepth option.
+
+ * tool/rbinstall.rb (bin-comm): limit depth of bindir and reject empty
+ files. [ruby-core:55101] [Bug #8432]
+
Mon May 27 16:16:18 2013 Koichi Sasada <ko1@atdot.net>
* vm_trace.c (rb_postponed_job_flush, rb_postponed_job_register): use
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
index 4e24645ea2..1063facbae 100755
--- a/tool/rbinstall.rb
+++ b/tool/rbinstall.rb
@@ -198,6 +198,7 @@ def install_recursive(srcdir, dest, options = {})
opts = options.clone
noinst = opts.delete(:no_install)
glob = opts.delete(:glob) || "*"
+ maxdepth = opts.delete(:maxdepth)
subpath = (srcdir.size+1)..-1
prune = []
skip = []
@@ -217,19 +218,21 @@ def install_recursive(srcdir, dest, options = {})
prune = path_matcher(prune)
skip = path_matcher(skip)
File.directory?(srcdir) or return rescue return
- paths = [[srcdir, dest, true]]
+ paths = [[srcdir, dest, 0]]
found = []
while file = paths.shift
found << file
file, d, dir = *file
if dir
+ depth = dir + 1
+ next if maxdepth and maxdepth < depth
files = []
Dir.foreach(file) do |f|
src = File.join(file, f)
d = File.join(dest, dir = src[subpath])
stat = File.lstat(src) rescue next
if stat.directory?
- files << [src, d, true] if /\A\./ !~ f and !prune[dir]
+ files << [src, d, depth] if maxdepth != depth and /\A\./ !~ f and !prune[dir]
elsif stat.symlink?
# skip
else
@@ -453,7 +456,7 @@ install?(:local, :comm, :bin, :'bin-comm') do
else
trans = proc {|base| base}
end
- install_recursive(File.join(srcdir, "bin"), bindir) do |src, cmd|
+ install_recursive(File.join(srcdir, "bin"), bindir, :maxdepth => 1) do |src, cmd|
cmd = cmd.sub(/[^\/]*\z/m) {|n| RbConfig.expand(trans[n])}
shebang = ''
@@ -462,6 +465,7 @@ install?(:local, :comm, :bin, :'bin-comm') do
shebang = f.gets
body = f.read
end
+ shebang or raise "empty file - #{src}"
if PROLOG_SCRIPT
shebang.sub!(/\A(\#!.*?ruby\b)?/) {PROLOG_SCRIPT + ($1 || "#!ruby\n")}
else