Sha256: c0c99708fc28caa77abe14918af265b74a21c9346e3a571d66d1003e86f2d750

Contents?: true

Size: 1020 Bytes

Versions: 40

Compression:

Stored size: 1020 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,
        :cwe_id => [369]
    end
  end
end

Version data entries

40 entries across 40 versions & 3 rubygems

Version Path
brakeman-7.0.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-7.0.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-7.0.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.2.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-6.2.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-6.2.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.2.2.rc1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-6.2.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-6.2.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.2.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.2.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-6.2.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-6.2.0 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.1.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-6.1.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-6.1.2 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-min-6.1.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-lib-6.1.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.1.1 lib/brakeman/checks/check_divide_by_zero.rb
brakeman-6.1.0 lib/brakeman/checks/check_divide_by_zero.rb