Sha256: 6de6fe54574e7a699b01f077409889d77a2b6787ee38354d9eb4228eda5bbb68

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

module TaintedLove
  module Replacer
    class ReplaceString < Base
      WRAP_METHODS = [
        :+, :*, :[], :[]= , :replace, :strip, :strip!, :inspect
      ]

      def replace!
        mod = Module.new do
          def self.wrap_call(name)
            define_method(name) do |*args, &block|
              return super(*args, &block) unless tainted? || args.any?(&:tainted?)

              result = super(*args, &block)

              result.tainted_love_tags += tainted_love_tags if tainted?

              args.select(&:tainted?).each do |arg|
                result.tainted_love_tags += arg.tainted_love_tags
              end

              result
            end
          end

          WRAP_METHODS.each do |sym|
            wrap_call(sym)
          end

          def split(*args)
            result = super(*args)

            if tainted?
              result.each do |value|
                value.taint.tainted_love_tags += tainted_love_tags
              end
            end

            result
          end
        end

        String.prepend(mod)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tainted_love-0.4.1 lib/tainted_love/replacer/replace_string.rb