Sha256: 4876b4140a9e439de6d80f3135821618e9dd49acb3bb94fa275a0f9190ee0d1f

Contents?: true

Size: 1.55 KB

Versions: 92

Compression:

Stored size: 1.55 KB

Contents

# encoding: utf-8

# The following is an adaptation of ruby 1.9.2's shellwords.rb file,
# it is modified to include '+' in the allowed list to allow for
# sendmail to accept email addresses as the sender with a + in them
#
module Mail
  module ShellEscape
    # Escapes a string so that it can be safely used in a Bourne shell
    # command line.
    #
    # Note that a resulted string should be used unquoted and is not
    # intended for use in double quotes nor in single quotes.
    #
    #   open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
    #     # ...
    #   }
    #
    # +String#shellescape+ is a shorthand for this function.
    #
    #   open("| grep #{pattern.shellescape} file") { |pipe|
    #     # ...
    #   }
    #
    def escape_for_shell(str)
      # An empty argument will be skipped, so return empty quotes.
      return "''" if str.empty?

      str = str.dup

      # Process as a single byte sequence because not all shell
      # implementations are multibyte aware.
      str.gsub!(/([^A-Za-z0-9_\s\+\-.,:\/@\n])/n, "\\\\\\1")

      # A LF cannot be escaped with a backslash because a backslash + LF
      # combo is regarded as line continuation and simply ignored.
      str.gsub!(/\n/, "'\n'")

      return str
    end

    module_function :escape_for_shell
  end
end

class String
  # call-seq:
  #   str.shellescape => string
  #
  # Escapes +str+ so that it can be safely used in a Bourne shell
  # command line.  See +Shellwords::shellescape+ for details.
  #
  def escape_for_shell
    Mail::ShellEscape.escape_for_shell(self)
  end
end

Version data entries

92 entries across 84 versions & 10 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
classiccms-0.7.4 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
classiccms-0.7.3 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.10 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
judge-2.0.5 vendor/bundle/ruby/2.1.0/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
classiccms-0.7.2 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
classiccms-0.7.1 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.9 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.8 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.7 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.6 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
classiccms-0.7.0 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
challah-1.0.0.beta vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.5 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.4 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
active_mailer-0.0.3 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
challah-0.9.1.beta.3 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
devise_sociable-0.1.0 vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
challah-0.9.1.beta vendor/bundle/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb
sunrise-cms-0.5.0.rc1 vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/core_extensions/shell_escape.rb