Skip to content

Commit

Permalink
Use command array form of IO.popen always
Browse files Browse the repository at this point in the history
So that an exception raises by non-existent command, not via shell.
  • Loading branch information
nobu committed Jun 4, 2022
1 parent 6b1a011 commit fd94dce
Showing 1 changed file with 4 additions and 46 deletions.
50 changes: 4 additions & 46 deletions lib/rdoc/ri/driver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -426,9 +426,6 @@ def initialize initial_options = {}
@use_stdout = options[:use_stdout]
@show_all = options[:show_all]
@width = options[:width]

# pager process for jruby
@jruby_pager_process = nil
end

##
Expand Down Expand Up @@ -1044,36 +1041,6 @@ def find_methods name
self
end

##
# Finds the given +pager+ for jruby. Returns an IO if +pager+ was found.
#
# Returns false if +pager+ does not exist.
#
# Returns nil if the jruby JVM doesn't support ProcessBuilder redirection
# (1.6 and older).

def find_pager_jruby pager
require 'java'
require 'shellwords'

return nil unless java.lang.ProcessBuilder.constants.include? :Redirect

pager = Shellwords.split pager

pb = java.lang.ProcessBuilder.new(*pager)
pb = pb.redirect_output java.lang.ProcessBuilder::Redirect::INHERIT

@jruby_pager_process = pb.start

input = @jruby_pager_process.output_stream

io = input.to_io
io.sync = true
io
rescue java.io.IOException
false
end

##
# Finds a store that matches +name+ which can be the name of a gem, "ruby",
# "home" or "site".
Expand Down Expand Up @@ -1503,23 +1470,14 @@ def run
def setup_pager
return if @use_stdout

jruby = RUBY_ENGINE == 'jruby'

pagers = [ENV['RI_PAGER'], ENV['PAGER'], 'pager', 'less', 'more']

require 'shellwords'
pagers.compact.uniq.each do |pager|
next unless pager

if jruby then
case io = find_pager_jruby(pager)
when nil then break
when false then next
else io
end
else
io = IO.popen(pager, 'w') rescue next
end
pager = Shellwords.split(pager)
next if pager.empty?

io = IO.popen(pager, 'w') rescue next
next if $? and $?.pid == io.pid and $?.exited? # pager didn't work

@paging = true
Expand Down

0 comments on commit fd94dce

Please sign in to comment.