Sha256: 56f173b196e29a85b0e07add86d489cbe44b045dbe975ca8772886ee2125af1c

Contents?: true

Size: 994 Bytes

Versions: 120

Compression:

Stored size: 994 Bytes

Contents

require 'brakeman/checks/base_check'

class Brakeman::CheckDivideByZero < Brakeman::BaseCheck
  Brakeman::Checks.add_optional self

  @description = "Warns on potential division by zero"

  def run_check
    tracker.find_call(:method => :"/").each do |result|
      check_division result
    end
  end

  def check_division result
    return unless original? result

    call = result[:call]

    denominator = call.first_arg

    if number? denominator and denominator.value == 0
      numerator = call.target

      if number? numerator
        if numerator.value.is_a? Float
          return # 0.0 / 0 is NaN and 1.0 / 0 is Infinity
        else
          confidence = :medium
        end
      else
        confidence = :weak
      end

      warn :result => result,
        :warning_type => "Divide by Zero",
        :warning_code => :divide_by_zero,
        :message => "Potential division by zero",
        :confidence => confidence,
        :user_input => denominator
    end
  end
end

Version data entries

120 entries across 106 versions & 4 rubygems

Version Path
brakeman-5.2.3 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.2.3 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-5.2.3 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-5.2.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.2.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-5.2.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-5.2.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.2.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-5.2.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-5.2.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.2.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-5.2.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-5.1.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.1.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-5.1.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-5.1.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.1.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-5.1.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-5.1.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-5.1.0 lib/brakeman/checks/check_divide_by_zero.rb