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