Sha256: c283c470fff5a306dcbc409b2f59f4c30ba5a730d4ab2aa78c1dbda6e66a76bd

Contents?: true

Size: 1.82 KB

Versions: 24

Compression:

Stored size: 1.82 KB

Contents

Brakeman.load_brakeman_dependency 'erubis'

# This is from Rails 5 version of the Erubis handler
# https://github.com/rails/rails/blob/ec608107801b1e505db03ba76bae4a326a5804ca/actionview/lib/action_view/template/handlers/erb.rb#L7-L73
class Brakeman::Rails3Erubis < ::Erubis::Eruby

  def add_preamble(src)
    @newline_pending = 0
    src << "@output_buffer = output_buffer || ActionView::OutputBuffer.new;"
  end

  def add_text(src, text)
    return if text.empty?

    if text == "\n"
      @newline_pending += 1
    else
      src << "@output_buffer.safe_append='"
      src << "\n" * @newline_pending if @newline_pending > 0
      src << escape_text(text)
      src << "'.freeze;"

      @newline_pending = 0
    end
  end

  # Erubis toggles <%= and <%== behavior when escaping is enabled.
  # We override to always treat <%== as escaped.
  def add_expr(src, code, indicator)
    case indicator
    when '=='
      add_expr_escaped(src, code)
    else
      super
    end
  end

  BLOCK_EXPR = /\s*((\s+|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/

  def add_expr_literal(src, code)
    flush_newline_if_pending(src)
    if code =~ BLOCK_EXPR
      src << '@output_buffer.append= ' << code
    else
      src << '@output_buffer.append=(' << code << ');'
    end
  end

  def add_expr_escaped(src, code)
    flush_newline_if_pending(src)
    if code =~ BLOCK_EXPR
      src << "@output_buffer.safe_expr_append= " << code
    else
      src << "@output_buffer.safe_expr_append=(" << code << ");"
    end
  end

  def add_stmt(src, code)
    flush_newline_if_pending(src)
    super
  end

  def add_postamble(src)
    flush_newline_if_pending(src)
    src << '@output_buffer.to_s'
  end

  def flush_newline_if_pending(src)
    if @newline_pending > 0
      src << "@output_buffer.safe_append='#{"\n" * @newline_pending}'.freeze;"
      @newline_pending = 0
    end
  end
end

Version data entries

24 entries across 24 versions & 3 rubygems

Version Path
brakeman-min-3.5.0 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.5.0 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.5.0 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.4.1 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.4.1 lib/brakeman/parsers/rails3_erubis.rb
brakeman-min-3.4.1 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.4.0 lib/brakeman/parsers/rails3_erubis.rb
brakeman-min-3.4.0 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.4.0 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.3.5 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.3.5 lib/brakeman/parsers/rails3_erubis.rb
brakeman-min-3.3.5 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.3.4 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.3.4 lib/brakeman/parsers/rails3_erubis.rb
brakeman-min-3.3.4 lib/brakeman/parsers/rails3_erubis.rb
brakeman-min-3.3.3 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.3.3 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.3.3 lib/brakeman/parsers/rails3_erubis.rb
brakeman-3.3.2 lib/brakeman/parsers/rails3_erubis.rb
brakeman-lib-3.3.2 lib/brakeman/parsers/rails3_erubis.rb