Class/Module Index [+]

Quicksearch

Brakeman::FindCall

Finds method calls matching the given target(s).

#-- This should be deprecated --#
#--  Do not use for new code  --#

Targets/methods can be:

- nil: matches anything, including nothing
- Empty array: matches nothing
- Symbol: matches single target/method exactly
- Array of symbols: matches against any of the symbols
- Regular expression: matches the expression
- Array of regular expressions: matches any of the expressions

If a target is also the name of a class, methods called on instances of that class will also be matched, in a very limited way. (Any methods called on Klass.new, basically. More useful when used in conjunction with AliasProcessor.)

Examples:

#To find any uses of this class:
FindCall.new :FindCall, nil

#Find system calls without a target
FindCall.new [], [:system, :exec, :syscall]

#Find all calls to length(), no matter the target
FindCall.new nil, :length

#Find all calls to sub, sub!, gsub, or gsub!
FindCall.new nil, /^g?sub!?$/

Public Class Methods

new(targets, methods, tracker, in_depth = false) click to toggle source
# File lib/brakeman/processors/lib/find_call.rb, line 36
def initialize targets, methods, tracker, in_depth = false
  super tracker
  @calls = []
  @find_targets = targets
  @find_methods = methods
  @current_class = nil
  @current_method = nil
  @in_depth = in_depth
end

Public Instance Methods

matches() click to toggle source

Returns a list of results.

A result looks like:

s(:result, :ClassName, :method_name, s(:call, ...))

or

s(:result, :template_name, s(:call, ...))
# File lib/brakeman/processors/lib/find_call.rb, line 55
def matches
  @calls
end
process_attrasgn(exp) click to toggle source

Process an assignment like a call

# File lib/brakeman/processors/lib/find_call.rb, line 113
def process_attrasgn exp
  process_call exp
end
process_call(exp) click to toggle source

Look for matching calls and add them to results

# File lib/brakeman/processors/lib/find_call.rb, line 83
def process_call exp
  target = get_target exp.target
  method = exp.method

  process_call_args exp

  if match(@find_targets, target) and match(@find_methods, method)

    if @current_template
      @calls << Sexp.new(:result, @current_template, exp).line(exp.line)
    else
      @calls << Sexp.new(:result, @current_module, @current_class, @current_method, exp).line(exp.line)
    end

  end
  
  #Normally FindCall won't match a method invocation that is the target of
  #another call, such as:
  #
  #  User.find(:first, :conditions => "user = '#{params['user']}').name
  #
  #A search for User.find will not match this unless @in_depth is true.
  if @in_depth and node_type? exp.target, :call
    process exp.target
  end

  exp
end
process_methdef(exp) click to toggle source

Process body of method

# File lib/brakeman/processors/lib/find_call.rb, line 71
def process_methdef exp
  process_all exp.body
end
Also aliased as: process_selfdef
process_rlist(exp) click to toggle source

Process body of block

# File lib/brakeman/processors/lib/find_call.rb, line 78
def process_rlist exp
  process_all exp
end
process_selfdef(exp) click to toggle source
Alias for: process_methdef
process_source(exp, klass = nil, method = nil, template = nil) click to toggle source

Process the given source. Provide either class and method being searched or the template. These names are used when reporting results.

Use FindCall#matches to retrieve results.

# File lib/brakeman/processors/lib/find_call.rb, line 63
def process_source exp, klass = nil, method = nil, template = nil
  @current_class = klass
  @current_method = method
  @current_template = template
  process exp
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.