lib/contrast/utils/assess/tracking_util.rb in contrast-agent-4.13.1 vs lib/contrast/utils/assess/tracking_util.rb in contrast-agent-4.14.0

- old
+ new

@@ -48,18 +48,13 @@ return false if obj.nil? return false if idx > 10 idx += 1 if Contrast::Utils::DuckUtils.iterable_hash?(obj) - obj.each_pair do |k, v| - return true if _tracked?(k, idx) || _tracked?(v, idx) - end - false + handle_hash obj, idx elsif Contrast::Utils::DuckUtils.iterable_enumerable?(obj) - obj.any? do |ele| - _tracked?(ele, idx) unless obj == ele - end + handle_enumerable obj, idx else Contrast::Agent::Assess::Tracker.tracked?(obj) end rescue StandardError => e # This is used to ask if a ton of objects are tracked. They may not @@ -82,27 +77,37 @@ return false if obj.nil? return false if idx > 10 idx += 1 if Contrast::Utils::DuckUtils.iterable_hash?(obj) - obj.each_pair do |k, v| - return true if _trackable?(k, idx) - return true if _trackable?(v, idx) - end - false + handle_hash obj, idx elsif Contrast::Utils::DuckUtils.iterable_enumerable?(obj) - obj.any? do |ele| - _trackable?(ele, idx) unless obj == ele - end + handle_enumerable obj, idx else Contrast::Agent::Assess::Tracker.trackable?(obj) end rescue StandardError => e # This is used to ask if a ton of objects are tracked. They may not # all be iterable. Bad things could happen in some cases, like when # checking a closed statement for SQL injection trigger events logger.warn('Failed to determine trackable', e, module: obj.cs__class) false + end + + def handle_hash obj, idx + caller_method = caller(1..1).first[/`.*'/][1..-2].to_sym + obj.each_pair do |k, v| + return true if send(caller_method, k, idx) + return true if send(caller_method, v, idx) + end + false + end + + def handle_enumerable obj, idx + caller_method = caller(1..1).first[/`.*'/][1..-2].to_sym + obj.any? do |ele| + send(caller_method, ele, idx) unless obj == ele + end end end end end end