24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/datadog/appsec/actions_handler.rb', line 24
def generate_stack(action_params)
return unless Datadog.configuration.appsec.stack_trace.enabled
stack_id = action_params['stack_id']
return unless stack_id
active_span = AppSec.active_context&.span
return unless active_span
event_category = Ext::EXPLOIT_PREVENTION_EVENT_CATEGORY
tag_key = Ext::TAG_METASTRUCT_STACK_TRACE
existing_stack_data = active_span.get_metastruct_tag(tag_key).dup || {event_category => []}
max_stack_traces = Datadog.configuration.appsec.stack_trace.max_stack_traces
return if max_stack_traces != 0 && existing_stack_data[event_category].count >= max_stack_traces
backtrace = SerializableBacktrace.new(locations: Array(caller_locations), stack_id: stack_id)
existing_stack_data[event_category] << backtrace
active_span.set_metastruct_tag(tag_key, existing_stack_data)
end
|