contrast-agent 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/cs__assess_kernel/cs__assess_kernel.c +7 -4
- data/ext/cs__assess_module/cs__assess_module.c +7 -7
- data/ext/cs__common/cs__common.c +4 -0
- data/ext/cs__common/cs__common.h +1 -0
- data/ext/cs__contrast_patch/cs__contrast_patch.c +52 -27
- data/ext/cs__contrast_patch/cs__contrast_patch.h +2 -0
- data/ext/cs__scope/cs__scope.c +747 -0
- data/ext/cs__scope/cs__scope.h +88 -0
- data/ext/cs__scope/extconf.rb +5 -0
- data/lib/contrast/agent/assess/contrast_event.rb +20 -13
- data/lib/contrast/agent/assess/contrast_object.rb +4 -1
- data/lib/contrast/agent/assess/policy/propagation_node.rb +2 -5
- data/lib/contrast/agent/assess/policy/propagator/match_data.rb +2 -0
- data/lib/contrast/agent/assess/policy/trigger_method.rb +4 -1
- data/lib/contrast/agent/assess/rule/response/{autocomplete_rule.rb → auto_complete_rule.rb} +4 -3
- data/lib/contrast/agent/assess/rule/response/base_rule.rb +12 -79
- data/lib/contrast/agent/assess/rule/response/body_rule.rb +109 -0
- data/lib/contrast/agent/assess/rule/response/cache_control_header_rule.rb +157 -0
- data/lib/contrast/agent/assess/rule/response/click_jacking_header_rule.rb +26 -0
- data/lib/contrast/agent/assess/rule/response/csp_header_insecure_rule.rb +14 -15
- data/lib/contrast/agent/assess/rule/response/csp_header_missing_rule.rb +5 -25
- data/lib/contrast/agent/assess/rule/response/framework/rails_support.rb +29 -0
- data/lib/contrast/agent/assess/rule/response/header_rule.rb +70 -0
- data/lib/contrast/agent/assess/rule/response/hsts_header_rule.rb +12 -36
- data/lib/contrast/agent/assess/rule/response/parameters_pollution_rule.rb +2 -1
- data/lib/contrast/agent/assess/rule/response/x_content_type_header_rule.rb +26 -0
- data/lib/contrast/agent/assess/rule/response/x_xss_protection_header_rule.rb +36 -0
- data/lib/contrast/agent/middleware.rb +1 -0
- data/lib/contrast/agent/patching/policy/after_load_patcher.rb +1 -3
- data/lib/contrast/agent/patching/policy/patch.rb +2 -6
- data/lib/contrast/agent/patching/policy/patcher.rb +1 -1
- data/lib/contrast/agent/protect/input_analyzer/input_analyzer.rb +94 -0
- data/lib/contrast/agent/protect/rule/base.rb +28 -1
- data/lib/contrast/agent/protect/rule/base_service.rb +10 -1
- data/lib/contrast/agent/protect/rule/cmd_injection.rb +2 -0
- data/lib/contrast/agent/protect/rule/deserialization.rb +6 -0
- data/lib/contrast/agent/protect/rule/http_method_tampering.rb +5 -1
- data/lib/contrast/agent/protect/rule/no_sqli.rb +1 -0
- data/lib/contrast/agent/protect/rule/path_traversal.rb +1 -0
- data/lib/contrast/agent/protect/rule/sqli/sqli_input_classification.rb +124 -0
- data/lib/contrast/agent/protect/rule/sqli/sqli_worth_watching.rb +121 -0
- data/lib/contrast/agent/protect/rule/sqli.rb +33 -0
- data/lib/contrast/agent/protect/rule/xxe.rb +4 -0
- data/lib/contrast/agent/reporting/input_analysis/input_analysis.rb +44 -0
- data/lib/contrast/agent/reporting/input_analysis/input_analysis_result.rb +115 -0
- data/lib/contrast/agent/reporting/input_analysis/input_type.rb +44 -0
- data/lib/contrast/agent/reporting/input_analysis/score_level.rb +21 -0
- data/lib/contrast/agent/reporting/report.rb +1 -0
- data/lib/contrast/agent/reporting/reporter.rb +8 -1
- data/lib/contrast/agent/reporting/reporting_events/finding.rb +69 -36
- data/lib/contrast/agent/reporting/reporting_events/finding_event.rb +88 -59
- data/lib/contrast/agent/reporting/reporting_events/{finding_object.rb → finding_event_object.rb} +24 -20
- data/lib/contrast/agent/reporting/reporting_events/finding_event_parent_object.rb +39 -0
- data/lib/contrast/agent/reporting/reporting_events/finding_event_property.rb +40 -0
- data/lib/contrast/agent/reporting/reporting_events/{finding_signature.rb → finding_event_signature.rb} +29 -24
- data/lib/contrast/agent/reporting/reporting_events/finding_event_source.rb +12 -8
- data/lib/contrast/agent/reporting/reporting_events/{finding_stack.rb → finding_event_stack.rb} +23 -19
- data/lib/contrast/agent/reporting/reporting_events/{finding_taint_range.rb → finding_event_taint_range.rb} +17 -15
- data/lib/contrast/agent/reporting/reporting_events/finding_request.rb +26 -53
- data/lib/contrast/agent/reporting/reporting_events/poll.rb +29 -0
- data/lib/contrast/agent/reporting/reporting_events/reporting_event.rb +5 -4
- data/lib/contrast/agent/reporting/reporting_events/route_discovery.rb +1 -0
- data/lib/contrast/agent/reporting/reporting_events/server_activity.rb +1 -1
- data/lib/contrast/agent/reporting/reporting_utilities/audit.rb +10 -3
- data/lib/contrast/agent/reporting/reporting_utilities/endpoints.rb +0 -1
- data/lib/contrast/agent/reporting/reporting_utilities/reporter_client.rb +1 -0
- data/lib/contrast/agent/reporting/reporting_utilities/reporter_client_utils.rb +28 -20
- data/lib/contrast/agent/reporting/reporting_utilities/response_handler.rb +1 -1
- data/lib/contrast/agent/reporting/reporting_utilities/response_handler_utils.rb +13 -1
- data/lib/contrast/agent/request_context.rb +6 -1
- data/lib/contrast/agent/request_context_extend.rb +85 -21
- data/lib/contrast/agent/scope.rb +102 -107
- data/lib/contrast/agent/service_heartbeat.rb +45 -2
- data/lib/contrast/agent/version.rb +1 -1
- data/lib/contrast/api/decorators/bot_blocker.rb +37 -0
- data/lib/contrast/api/decorators/ip_denylist.rb +37 -0
- data/lib/contrast/api/decorators/rasp_rule_sample.rb +29 -0
- data/lib/contrast/api/decorators/user_input.rb +11 -1
- data/lib/contrast/api/decorators/virtual_patch.rb +34 -0
- data/lib/contrast/components/logger.rb +5 -0
- data/lib/contrast/components/protect.rb +4 -2
- data/lib/contrast/components/scope.rb +98 -91
- data/lib/contrast/config/agent_configuration.rb +58 -12
- data/lib/contrast/config/api_configuration.rb +100 -12
- data/lib/contrast/config/api_proxy_configuration.rb +55 -3
- data/lib/contrast/config/application_configuration.rb +114 -15
- data/lib/contrast/config/assess_configuration.rb +106 -12
- data/lib/contrast/config/assess_rules_configuration.rb +44 -3
- data/lib/contrast/config/base_configuration.rb +1 -0
- data/lib/contrast/config/certification_configuration.rb +74 -3
- data/lib/contrast/config/exception_configuration.rb +61 -3
- data/lib/contrast/config/heap_dump_configuration.rb +101 -17
- data/lib/contrast/config/inventory_configuration.rb +64 -3
- data/lib/contrast/config/logger_configuration.rb +46 -3
- data/lib/contrast/config/protect_rule_configuration.rb +36 -9
- data/lib/contrast/config/protect_rules_configuration.rb +120 -17
- data/lib/contrast/config/request_audit_configuration.rb +68 -3
- data/lib/contrast/config/ruby_configuration.rb +96 -22
- data/lib/contrast/config/sampling_configuration.rb +76 -10
- data/lib/contrast/config/server_configuration.rb +56 -11
- data/lib/contrast/configuration.rb +6 -3
- data/lib/contrast/logger/cef_log.rb +151 -0
- data/lib/contrast/utils/hash_digest.rb +14 -6
- data/lib/contrast/utils/log_utils.rb +114 -0
- data/lib/contrast/utils/middleware_utils.rb +6 -7
- data/lib/contrast/utils/net_http_base.rb +12 -9
- data/lib/contrast/utils/patching/policy/patch_utils.rb +0 -4
- data/lib/contrast.rb +4 -3
- data/ruby-agent.gemspec +1 -1
- data/service_executables/VERSION +1 -1
- data/service_executables/linux/contrast-service +0 -0
- data/service_executables/mac/contrast-service +0 -0
- metadata +41 -21
- data/lib/contrast/agent/assess/rule/response/cachecontrol_rule.rb +0 -184
- data/lib/contrast/agent/assess/rule/response/clickjacking_rule.rb +0 -66
- data/lib/contrast/agent/assess/rule/response/x_content_type_rule.rb +0 -52
- data/lib/contrast/agent/assess/rule/response/x_xss_protection_rule.rb +0 -53
- data/lib/contrast/extension/kernel.rb +0 -54
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fa7aa416c6a15843424449814734c462a46e2951cbe41f010bd2570c03717cc5
|
|
4
|
+
data.tar.gz: ade4eac9f0f32d9aa339d6429a30728f0b7950a68db8b8b1aad2e0e5cfe52d71
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd24331e49a9d2826628613ccc3f1bcf5c3ba337ba866ea321fd5a795d9b585507d935b92e64bffca5d70f83d4dbac7a978b484b372ae9c590c2d82ca3a57e91
|
|
7
|
+
data.tar.gz: cc3b03f3b101658f74006af2b4ef4c81256c2890372727fcd6f5d300926ca6454a6da64be5500cd0d5cc103e36d92a5c8f24495677558e33856fe5e8f99e71f9
|
|
@@ -3,19 +3,22 @@
|
|
|
3
3
|
|
|
4
4
|
#include "cs__assess_kernel.h"
|
|
5
5
|
#include "../cs__common/cs__common.h"
|
|
6
|
+
#include "../cs__scope/cs__scope.h"
|
|
6
7
|
#include <ruby.h>
|
|
7
8
|
|
|
8
9
|
VALUE
|
|
9
10
|
contrast_patched_kernel_exec(const int argc, const VALUE *argv,
|
|
10
11
|
const VALUE self) {
|
|
11
12
|
int nested_scope =
|
|
12
|
-
|
|
13
|
+
inst_methods_in_cntr_scope(contrast_patcher(), 0);
|
|
13
14
|
|
|
14
|
-
if (
|
|
15
|
-
|
|
15
|
+
if (nested_scope == Qfalse && argc > 0) {
|
|
16
|
+
/* enter scope */
|
|
17
|
+
inst_methods_enter_cntr_scope(contrast_patcher(), 0);
|
|
16
18
|
VALUE data = argv[0];
|
|
17
19
|
rb_funcall(kernel_propagator, exec_apply_trigger, 1, data);
|
|
18
|
-
|
|
20
|
+
/* exit scope */
|
|
21
|
+
inst_methods_exit_cntr_scope(contrast_patcher(), 0);
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
/* maybe this should be rb_funcall2. this works right now because *argv ==
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
#include "cs__assess_module.h"
|
|
5
5
|
#include "../cs__common/cs__common.h"
|
|
6
|
+
#include "../cs__scope/cs__scope.h"
|
|
6
7
|
#include <ruby.h>
|
|
7
8
|
|
|
8
9
|
void contrast_assess_eval_trigger_check(VALUE module, VALUE source, VALUE ret) {
|
|
@@ -11,12 +12,11 @@ void contrast_assess_eval_trigger_check(VALUE module, VALUE source, VALUE ret) {
|
|
|
11
12
|
return;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
int nested_scope =
|
|
15
|
-
|
|
15
|
+
int nested_scope = inst_methods_in_cntr_scope(contrast_patcher(), 0);
|
|
16
|
+
/* enter scope */
|
|
17
|
+
inst_methods_enter_cntr_scope(contrast_patcher(), 0);
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!nested_scope) {
|
|
19
|
+
if (nested_scope == Qfalse) {
|
|
20
20
|
VALUE method = rb_funcall(rb_mKernel, rb_sym_method, 0);
|
|
21
21
|
/* If this method ever throws an exception, the scope-leave
|
|
22
22
|
* needs to be moved within a rescue call.
|
|
@@ -24,8 +24,8 @@ void contrast_assess_eval_trigger_check(VALUE module, VALUE source, VALUE ret) {
|
|
|
24
24
|
rb_funcall(module_eval_trigger, trigger_check_method, 4, module, source,
|
|
25
25
|
ret, method);
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
/* exit scope */
|
|
28
|
+
inst_methods_exit_cntr_scope(contrast_patcher(), 0);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
VALUE
|
data/ext/cs__common/cs__common.c
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
VALUE contrast, agent, patching, policy, assess;
|
|
11
11
|
VALUE core_extensions, core_assess;
|
|
12
12
|
VALUE assess_policy, assess_propagator;
|
|
13
|
+
VALUE components;
|
|
13
14
|
VALUE funchook_path;
|
|
14
15
|
|
|
15
16
|
VALUE rb_sym_enter_scope;
|
|
@@ -175,6 +176,9 @@ void Init_cs__common(void) {
|
|
|
175
176
|
contrast = rb_define_module("Contrast");
|
|
176
177
|
agent = rb_define_module_under(contrast, "Agent");
|
|
177
178
|
|
|
179
|
+
/* components => Contrast::Components */
|
|
180
|
+
components = rb_define_module_under(contrast, "Components");
|
|
181
|
+
|
|
178
182
|
assess = rb_define_module_under(agent, "Assess");
|
|
179
183
|
|
|
180
184
|
patching = rb_define_module_under(agent, "Patching");
|
data/ext/cs__common/cs__common.h
CHANGED
|
@@ -17,6 +17,7 @@ extern VALUE contrast, agent, patching, policy, assess;
|
|
|
17
17
|
extern VALUE core_extensions, core_assess;
|
|
18
18
|
extern VALUE assess_policy, assess_propagator;
|
|
19
19
|
extern VALUE funchook_path;
|
|
20
|
+
extern VALUE components;
|
|
20
21
|
|
|
21
22
|
extern VALUE rb_sym_enter_scope;
|
|
22
23
|
extern VALUE rb_sym_exit_scope;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
#include "cs__contrast_patch.h"
|
|
5
5
|
#include "../cs__common/cs__common.h"
|
|
6
|
+
#include "../cs__scope/cs__scope.h"
|
|
6
7
|
#include <ruby.h>
|
|
7
8
|
|
|
8
9
|
VALUE build_preshift(const VALUE method_policy, const VALUE object,
|
|
@@ -84,15 +85,22 @@ VALUE contrast_call_post_patch(const VALUE method_policy, const VALUE preshift,
|
|
|
84
85
|
method_policy, preshift, object, ret, send, block);
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
VALUE exception
|
|
90
|
-
VALUE *argv;
|
|
91
|
-
|
|
88
|
+
/* wrap rb_ensure so we can rescue an exception */
|
|
89
|
+
VALUE rescue_func(VALUE arg1) {
|
|
90
|
+
VALUE exception;
|
|
92
91
|
/* rb_errinfo() gives the value of $!, the exception that
|
|
93
92
|
* triggered a rescue block.
|
|
94
93
|
*/
|
|
95
94
|
exception = rb_errinfo();
|
|
95
|
+
rb_exc_raise(exception);
|
|
96
|
+
|
|
97
|
+
return Qnil;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
VALUE contrast_patch_call_ensure(const VALUE *args) {
|
|
101
|
+
int argc;
|
|
102
|
+
VALUE object, preshift, method_policy, method;
|
|
103
|
+
VALUE *argv;
|
|
96
104
|
|
|
97
105
|
object = args[0];
|
|
98
106
|
method = args[1];
|
|
@@ -103,12 +111,19 @@ VALUE contrast_patch_call_rescue(const VALUE *args) {
|
|
|
103
111
|
|
|
104
112
|
contrast_call_post_patch(method_policy, preshift, object, Qnil, argc, argv);
|
|
105
113
|
|
|
106
|
-
/* reraise the exception that got us here */
|
|
107
|
-
rb_exc_raise(exception);
|
|
108
|
-
|
|
109
114
|
return Qnil;
|
|
110
115
|
}
|
|
111
116
|
|
|
117
|
+
VALUE ensure_wrapper(const VALUE *args) {
|
|
118
|
+
VALUE original_method, original_args, ensure_args;
|
|
119
|
+
|
|
120
|
+
original_method = args[0];
|
|
121
|
+
original_args = (VALUE)args[1];
|
|
122
|
+
ensure_args = (VALUE)args[2];
|
|
123
|
+
|
|
124
|
+
return rb_ensure(original_method, original_args, contrast_patch_call_ensure, (VALUE)ensure_args);
|
|
125
|
+
}
|
|
126
|
+
|
|
112
127
|
VALUE contrast_call_super(const VALUE *args) {
|
|
113
128
|
int argc;
|
|
114
129
|
VALUE *argv;
|
|
@@ -122,7 +137,8 @@ VALUE contrast_run_patches(const VALUE *wrapped_args) {
|
|
|
122
137
|
VALUE impl, method, method_policy, object, original_args, original_ret, preshift, transformed_ret;
|
|
123
138
|
int argc;
|
|
124
139
|
VALUE *argv;
|
|
125
|
-
VALUE
|
|
140
|
+
VALUE ensure_args[6];
|
|
141
|
+
VALUE rescue_wrapper_args[3];
|
|
126
142
|
|
|
127
143
|
impl = wrapped_args[0];
|
|
128
144
|
original_args = wrapped_args[1];
|
|
@@ -132,18 +148,22 @@ VALUE contrast_run_patches(const VALUE *wrapped_args) {
|
|
|
132
148
|
argc = NUM2INT(wrapped_args[5]);
|
|
133
149
|
argv = (VALUE *)wrapped_args[6];
|
|
134
150
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
151
|
+
rescue_wrapper_args[0] = contrast_patch_call_original;
|
|
152
|
+
rescue_wrapper_args[1] = original_args;
|
|
153
|
+
rescue_wrapper_args[2] = ensure_args;
|
|
154
|
+
|
|
155
|
+
ensure_args[0] = object;
|
|
156
|
+
ensure_args[1] = method;
|
|
157
|
+
ensure_args[2] = INT2NUM(argc);
|
|
158
|
+
ensure_args[3] = (VALUE)argv;
|
|
159
|
+
ensure_args[4] = method_policy;
|
|
140
160
|
|
|
141
161
|
/* Tracking, triggering, and propagation here. */
|
|
142
162
|
contrast_call_pre_patch(method_policy, method, object, argc, argv, Qnil);
|
|
143
163
|
|
|
144
164
|
/* Capture pre-call state */
|
|
145
165
|
preshift = build_preshift(method_policy, object, argc, argv);
|
|
146
|
-
|
|
166
|
+
ensure_args[5] = preshift;
|
|
147
167
|
|
|
148
168
|
/* We wrap a call to the original method with a rescue block, and we use
|
|
149
169
|
* rb_rescue2 to capture all Exception-inheriting exceptions (and if your
|
|
@@ -178,15 +198,12 @@ VALUE contrast_run_patches(const VALUE *wrapped_args) {
|
|
|
178
198
|
switch (impl) {
|
|
179
199
|
case IMPL_ALIAS_INSTANCE:
|
|
180
200
|
case IMPL_ALIAS_SINGLETON:
|
|
181
|
-
original_ret =
|
|
182
|
-
contrast_patch_call_rescue,
|
|
183
|
-
(VALUE)rescue_args, rb_eException, 0);
|
|
201
|
+
original_ret = rb_rescue(ensure_wrapper, rescue_wrapper_args, rescue_func, Qnil);
|
|
184
202
|
break;
|
|
185
203
|
case IMPL_PREPEND_INSTANCE:
|
|
186
204
|
case IMPL_PREPEND_SINGLETON:
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
(VALUE)rescue_args, rb_eException, 0);
|
|
205
|
+
rescue_wrapper_args[0] = contrast_call_super;
|
|
206
|
+
original_ret = rb_rescue(ensure_wrapper, rescue_wrapper_args, rescue_func, Qnil);
|
|
190
207
|
break;
|
|
191
208
|
};
|
|
192
209
|
|
|
@@ -214,8 +231,10 @@ VALUE contrast_run_patches(const VALUE *wrapped_args) {
|
|
|
214
231
|
|
|
215
232
|
VALUE contrast_ensure_function(const VALUE method_policy) {
|
|
216
233
|
/* exit scope */
|
|
217
|
-
rb_funcall(
|
|
218
|
-
|
|
234
|
+
VALUE scopes = rb_funcall(method_policy, rb_sym_scopes_to_exit, 0);
|
|
235
|
+
|
|
236
|
+
inst_methods_exit_method_scope(contrast_patcher(), scopes);
|
|
237
|
+
inst_methods_exit_cntr_scope(contrast_patcher(), 0);
|
|
219
238
|
|
|
220
239
|
return Qnil;
|
|
221
240
|
}
|
|
@@ -235,10 +254,10 @@ VALUE contrast_patch_dispatch(const int argc, const VALUE *argv,
|
|
|
235
254
|
* which is unnecessary, or run Contrast analysis on Contrast code,
|
|
236
255
|
* which will never terminate.
|
|
237
256
|
*/
|
|
238
|
-
nested_scope =
|
|
257
|
+
nested_scope = inst_methods_in_cntr_scope(contrast_patcher(), 0);
|
|
239
258
|
|
|
240
259
|
/* enter scope */
|
|
241
|
-
|
|
260
|
+
inst_methods_enter_cntr_scope(contrast_patcher(), 0);
|
|
242
261
|
|
|
243
262
|
/* Get the name of the calling method */
|
|
244
263
|
method = rb_funcall(object, rb_sym_method, 0);
|
|
@@ -270,7 +289,7 @@ VALUE contrast_patch_dispatch(const int argc, const VALUE *argv,
|
|
|
270
289
|
}
|
|
271
290
|
|
|
272
291
|
/* Check conditions for not doing Contrast analysis */
|
|
273
|
-
if (nested_scope) {
|
|
292
|
+
if (nested_scope == Qtrue) {
|
|
274
293
|
/* if we were in scope */
|
|
275
294
|
do_contrast = 0;
|
|
276
295
|
} else if (!RTEST(known)) {
|
|
@@ -299,7 +318,9 @@ VALUE contrast_patch_dispatch(const int argc, const VALUE *argv,
|
|
|
299
318
|
}
|
|
300
319
|
|
|
301
320
|
/* Enter any scopes specific to method policy */
|
|
302
|
-
rb_funcall(
|
|
321
|
+
VALUE scopes = rb_funcall(method_policy, rb_sym_scopes_to_enter, 0);
|
|
322
|
+
|
|
323
|
+
inst_methods_enter_method_scope(contrast_patcher(), scopes);
|
|
303
324
|
|
|
304
325
|
/* If we're not doing Contrast analysis, exit scope and treat as normal. */
|
|
305
326
|
if (!do_contrast) {
|
|
@@ -488,6 +509,9 @@ void Init_cs__contrast_patch(void) {
|
|
|
488
509
|
|
|
489
510
|
rb_sym_enter_method_scope = rb_intern("enter_method_scope!");
|
|
490
511
|
rb_sym_exit_method_scope = rb_intern("exit_method_scope!");
|
|
512
|
+
rb_sym_scopes_to_enter = rb_intern("scopes_to_enter");
|
|
513
|
+
rb_sym_scopes_to_exit = rb_intern("scopes_to_exit");
|
|
514
|
+
|
|
491
515
|
|
|
492
516
|
rb_define_module_function(contrast_patcher(), "contrast_define_method",
|
|
493
517
|
contrast_patch_define_method, 3);
|
|
@@ -500,4 +524,5 @@ void Init_cs__contrast_patch(void) {
|
|
|
500
524
|
|
|
501
525
|
/* preshift_class = Contrast::Agent::Assess::PreShift */
|
|
502
526
|
preshift_class = rb_define_class_under(assess, "PreShift", rb_cObject);
|
|
527
|
+
|
|
503
528
|
}
|
|
@@ -18,6 +18,8 @@ static VALUE rb_sym_cs_to_s;
|
|
|
18
18
|
|
|
19
19
|
static VALUE rb_sym_enter_method_scope;
|
|
20
20
|
static VALUE rb_sym_exit_method_scope;
|
|
21
|
+
static VALUE rb_sym_scopes_to_enter;
|
|
22
|
+
static VALUE rb_sym_scopes_to_exit;
|
|
21
23
|
|
|
22
24
|
static VALUE rb_sym_build_method_name;
|
|
23
25
|
static VALUE rb_sym_info_for;
|