lib/yard/cli/yardoc.rb in yard-0.9.11 vs lib/yard/cli/yardoc.rb in yard-0.9.12

- old
+ new

@@ -409,18 +409,31 @@ # Adds a set of extra documentation files to be processed # @param [Array<String>] files the set of documentation files def add_extra_files(*files) files.map! {|f| f.include?("*") ? Dir.glob(f) : f }.flatten! files.each do |file| - if File.file?(file) + if extra_file_valid?(file) options.files << CodeObjects::ExtraFileObject.new(file) - else - log.warn "Could not find extra file: #{file}" end end end + # @param file [String] the filename to validate + # @param check_exists [Boolean] whether the file should exist on disk + # @return [Boolean] whether the file is allowed to be used + def extra_file_valid?(file, check_exists = true) + if file =~ %r{^(?:\.\./|/)} + log.warn "Invalid file: #{file}" + false + elsif check_exists && !File.file?(file) + log.warn "Could not find file: #{file}" + false + else + true + end + end + # Parses the file arguments into Ruby files and extra files, which are # separated by a '-' element. # # @example Parses a set of Ruby source files # parse_files %w(file1 file2 file3) @@ -642,29 +655,24 @@ options.title = title end opts.on('-r', '--readme FILE', '--main FILE', 'The readme file used as the title page', ' of documentation.') do |readme| - if File.file?(readme) + if extra_file_valid?(readme) options.readme = CodeObjects::ExtraFileObject.new(readme) - else - log.warn "Could not find readme file: #{readme}" end end opts.on('--files FILE1,FILE2,...', 'Any extra comma separated static files to be ', ' included (eg. FAQ)') do |files| add_extra_files(*files.split(",")) end opts.on('--asset FROM[:TO]', 'A file or directory to copy over to output ', ' directory after generating') do |asset| - re = %r{^(?:\.\./|/)} from, to = *asset.split(':').map {|f| File.cleanpath(f, true) } to ||= from - if from =~ re || to =~ re - log.warn "Invalid file '#{asset}'" - else + if extra_file_valid?(from, false) && extra_file_valid?(to, false) assets[from] = to end end opts.on('-o', '--output-dir PATH',