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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/ext/cs__assess_kernel/cs__assess_kernel.c +7 -4
  3. data/ext/cs__assess_module/cs__assess_module.c +7 -7
  4. data/ext/cs__common/cs__common.c +4 -0
  5. data/ext/cs__common/cs__common.h +1 -0
  6. data/ext/cs__contrast_patch/cs__contrast_patch.c +52 -27
  7. data/ext/cs__contrast_patch/cs__contrast_patch.h +2 -0
  8. data/ext/cs__scope/cs__scope.c +747 -0
  9. data/ext/cs__scope/cs__scope.h +88 -0
  10. data/ext/cs__scope/extconf.rb +5 -0
  11. data/lib/contrast/agent/assess/contrast_event.rb +20 -13
  12. data/lib/contrast/agent/assess/contrast_object.rb +4 -1
  13. data/lib/contrast/agent/assess/policy/propagation_node.rb +2 -5
  14. data/lib/contrast/agent/assess/policy/propagator/match_data.rb +2 -0
  15. data/lib/contrast/agent/assess/policy/trigger_method.rb +4 -1
  16. data/lib/contrast/agent/assess/rule/response/{autocomplete_rule.rb → auto_complete_rule.rb} +4 -3
  17. data/lib/contrast/agent/assess/rule/response/base_rule.rb +12 -79
  18. data/lib/contrast/agent/assess/rule/response/body_rule.rb +109 -0
  19. data/lib/contrast/agent/assess/rule/response/cache_control_header_rule.rb +157 -0
  20. data/lib/contrast/agent/assess/rule/response/click_jacking_header_rule.rb +26 -0
  21. data/lib/contrast/agent/assess/rule/response/csp_header_insecure_rule.rb +14 -15
  22. data/lib/contrast/agent/assess/rule/response/csp_header_missing_rule.rb +5 -25
  23. data/lib/contrast/agent/assess/rule/response/framework/rails_support.rb +29 -0
  24. data/lib/contrast/agent/assess/rule/response/header_rule.rb +70 -0
  25. data/lib/contrast/agent/assess/rule/response/hsts_header_rule.rb +12 -36
  26. data/lib/contrast/agent/assess/rule/response/parameters_pollution_rule.rb +2 -1
  27. data/lib/contrast/agent/assess/rule/response/x_content_type_header_rule.rb +26 -0
  28. data/lib/contrast/agent/assess/rule/response/x_xss_protection_header_rule.rb +36 -0
  29. data/lib/contrast/agent/middleware.rb +1 -0
  30. data/lib/contrast/agent/patching/policy/after_load_patcher.rb +1 -3
  31. data/lib/contrast/agent/patching/policy/patch.rb +2 -6
  32. data/lib/contrast/agent/patching/policy/patcher.rb +1 -1
  33. data/lib/contrast/agent/protect/input_analyzer/input_analyzer.rb +94 -0
  34. data/lib/contrast/agent/protect/rule/base.rb +28 -1
  35. data/lib/contrast/agent/protect/rule/base_service.rb +10 -1
  36. data/lib/contrast/agent/protect/rule/cmd_injection.rb +2 -0
  37. data/lib/contrast/agent/protect/rule/deserialization.rb +6 -0
  38. data/lib/contrast/agent/protect/rule/http_method_tampering.rb +5 -1
  39. data/lib/contrast/agent/protect/rule/no_sqli.rb +1 -0
  40. data/lib/contrast/agent/protect/rule/path_traversal.rb +1 -0
  41. data/lib/contrast/agent/protect/rule/sqli/sqli_input_classification.rb +124 -0
  42. data/lib/contrast/agent/protect/rule/sqli/sqli_worth_watching.rb +121 -0
  43. data/lib/contrast/agent/protect/rule/sqli.rb +33 -0
  44. data/lib/contrast/agent/protect/rule/xxe.rb +4 -0
  45. data/lib/contrast/agent/reporting/input_analysis/input_analysis.rb +44 -0
  46. data/lib/contrast/agent/reporting/input_analysis/input_analysis_result.rb +115 -0
  47. data/lib/contrast/agent/reporting/input_analysis/input_type.rb +44 -0
  48. data/lib/contrast/agent/reporting/input_analysis/score_level.rb +21 -0
  49. data/lib/contrast/agent/reporting/report.rb +1 -0
  50. data/lib/contrast/agent/reporting/reporter.rb +8 -1
  51. data/lib/contrast/agent/reporting/reporting_events/finding.rb +69 -36
  52. data/lib/contrast/agent/reporting/reporting_events/finding_event.rb +88 -59
  53. data/lib/contrast/agent/reporting/reporting_events/{finding_object.rb → finding_event_object.rb} +24 -20
  54. data/lib/contrast/agent/reporting/reporting_events/finding_event_parent_object.rb +39 -0
  55. data/lib/contrast/agent/reporting/reporting_events/finding_event_property.rb +40 -0
  56. data/lib/contrast/agent/reporting/reporting_events/{finding_signature.rb → finding_event_signature.rb} +29 -24
  57. data/lib/contrast/agent/reporting/reporting_events/finding_event_source.rb +12 -8
  58. data/lib/contrast/agent/reporting/reporting_events/{finding_stack.rb → finding_event_stack.rb} +23 -19
  59. data/lib/contrast/agent/reporting/reporting_events/{finding_taint_range.rb → finding_event_taint_range.rb} +17 -15
  60. data/lib/contrast/agent/reporting/reporting_events/finding_request.rb +26 -53
  61. data/lib/contrast/agent/reporting/reporting_events/poll.rb +29 -0
  62. data/lib/contrast/agent/reporting/reporting_events/reporting_event.rb +5 -4
  63. data/lib/contrast/agent/reporting/reporting_events/route_discovery.rb +1 -0
  64. data/lib/contrast/agent/reporting/reporting_events/server_activity.rb +1 -1
  65. data/lib/contrast/agent/reporting/reporting_utilities/audit.rb +10 -3
  66. data/lib/contrast/agent/reporting/reporting_utilities/endpoints.rb +0 -1
  67. data/lib/contrast/agent/reporting/reporting_utilities/reporter_client.rb +1 -0
  68. data/lib/contrast/agent/reporting/reporting_utilities/reporter_client_utils.rb +28 -20
  69. data/lib/contrast/agent/reporting/reporting_utilities/response_handler.rb +1 -1
  70. data/lib/contrast/agent/reporting/reporting_utilities/response_handler_utils.rb +13 -1
  71. data/lib/contrast/agent/request_context.rb +6 -1
  72. data/lib/contrast/agent/request_context_extend.rb +85 -21
  73. data/lib/contrast/agent/scope.rb +102 -107
  74. data/lib/contrast/agent/service_heartbeat.rb +45 -2
  75. data/lib/contrast/agent/version.rb +1 -1
  76. data/lib/contrast/api/decorators/bot_blocker.rb +37 -0
  77. data/lib/contrast/api/decorators/ip_denylist.rb +37 -0
  78. data/lib/contrast/api/decorators/rasp_rule_sample.rb +29 -0
  79. data/lib/contrast/api/decorators/user_input.rb +11 -1
  80. data/lib/contrast/api/decorators/virtual_patch.rb +34 -0
  81. data/lib/contrast/components/logger.rb +5 -0
  82. data/lib/contrast/components/protect.rb +4 -2
  83. data/lib/contrast/components/scope.rb +98 -91
  84. data/lib/contrast/config/agent_configuration.rb +58 -12
  85. data/lib/contrast/config/api_configuration.rb +100 -12
  86. data/lib/contrast/config/api_proxy_configuration.rb +55 -3
  87. data/lib/contrast/config/application_configuration.rb +114 -15
  88. data/lib/contrast/config/assess_configuration.rb +106 -12
  89. data/lib/contrast/config/assess_rules_configuration.rb +44 -3
  90. data/lib/contrast/config/base_configuration.rb +1 -0
  91. data/lib/contrast/config/certification_configuration.rb +74 -3
  92. data/lib/contrast/config/exception_configuration.rb +61 -3
  93. data/lib/contrast/config/heap_dump_configuration.rb +101 -17
  94. data/lib/contrast/config/inventory_configuration.rb +64 -3
  95. data/lib/contrast/config/logger_configuration.rb +46 -3
  96. data/lib/contrast/config/protect_rule_configuration.rb +36 -9
  97. data/lib/contrast/config/protect_rules_configuration.rb +120 -17
  98. data/lib/contrast/config/request_audit_configuration.rb +68 -3
  99. data/lib/contrast/config/ruby_configuration.rb +96 -22
  100. data/lib/contrast/config/sampling_configuration.rb +76 -10
  101. data/lib/contrast/config/server_configuration.rb +56 -11
  102. data/lib/contrast/configuration.rb +6 -3
  103. data/lib/contrast/logger/cef_log.rb +151 -0
  104. data/lib/contrast/utils/hash_digest.rb +14 -6
  105. data/lib/contrast/utils/log_utils.rb +114 -0
  106. data/lib/contrast/utils/middleware_utils.rb +6 -7
  107. data/lib/contrast/utils/net_http_base.rb +12 -9
  108. data/lib/contrast/utils/patching/policy/patch_utils.rb +0 -4
  109. data/lib/contrast.rb +4 -3
  110. data/ruby-agent.gemspec +1 -1
  111. data/service_executables/VERSION +1 -1
  112. data/service_executables/linux/contrast-service +0 -0
  113. data/service_executables/mac/contrast-service +0 -0
  114. metadata +41 -21
  115. data/lib/contrast/agent/assess/rule/response/cachecontrol_rule.rb +0 -184
  116. data/lib/contrast/agent/assess/rule/response/clickjacking_rule.rb +0 -66
  117. data/lib/contrast/agent/assess/rule/response/x_content_type_rule.rb +0 -52
  118. data/lib/contrast/agent/assess/rule/response/x_xss_protection_rule.rb +0 -53
  119. data/lib/contrast/extension/kernel.rb +0 -54
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c756fb0e7fe0433c7507c2cdb7082e635adabea8847c545333d65800225b1e3d
4
- data.tar.gz: c71e1a8d020e3dfe98ea58d844924b0b0a9e1576b5f6899d186abc28e4efb152
3
+ metadata.gz: fa7aa416c6a15843424449814734c462a46e2951cbe41f010bd2570c03717cc5
4
+ data.tar.gz: ade4eac9f0f32d9aa339d6429a30728f0b7950a68db8b8b1aad2e0e5cfe52d71
5
5
  SHA512:
6
- metadata.gz: 82a0a252fa7696b2590f8be43fba09e03c6b13371a58a678b31e088e01a244311e0ac9d5b077de5d7970c16bc9a2144504d01a0e037c5e0f0b06d06e8530c57a
7
- data.tar.gz: d9fd4708ab8238a22a2e3187e880a898635739b00f0d2f4f224904325f3b88b28f3470cf37733d5875e97018a02a5bfe10bd7f041219fd842b596e9697bfdbb6
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
- RTEST(rb_funcall(contrast_patcher(), rb_sym_in_scope, 0));
13
+ inst_methods_in_cntr_scope(contrast_patcher(), 0);
13
14
 
14
- if (!nested_scope && argc > 0) {
15
- rb_funcall(contrast_patcher(), rb_sym_enter_scope, 0);
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
- rb_funcall(contrast_patcher(), rb_sym_exit_scope, 0);
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
- RTEST(rb_funcall(contrast_patcher(), rb_sym_in_scope, 0));
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
- rb_funcall(contrast_patcher(), rb_sym_enter_scope, 0);
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
- rb_funcall(contrast_patcher(), rb_sym_exit_scope, 0);
27
+ /* exit scope */
28
+ inst_methods_exit_cntr_scope(contrast_patcher(), 0);
29
29
  }
30
30
 
31
31
  VALUE
@@ -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");
@@ -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
- VALUE contrast_patch_call_rescue(const VALUE *args) {
88
- int argc;
89
- VALUE exception, object, preshift, method_policy, method;
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 rescue_args[6];
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
- rescue_args[0] = object;
136
- rescue_args[1] = method;
137
- rescue_args[2] = INT2NUM(argc);
138
- rescue_args[3] = (VALUE)argv;
139
- rescue_args[4] = method_policy;
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
- rescue_args[5] = preshift;
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 = rb_rescue2(contrast_patch_call_original, original_args,
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
- original_ret = rb_rescue2(contrast_call_super, original_args,
188
- contrast_patch_call_rescue,
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(contrast_patcher(), rb_sym_exit_method_scope, 1, method_policy);
218
- rb_funcall(contrast_patcher(), rb_sym_exit_scope, 0);
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 = RTEST(rb_funcall(contrast_patcher(), rb_sym_in_scope, 0));
257
+ nested_scope = inst_methods_in_cntr_scope(contrast_patcher(), 0);
239
258
 
240
259
  /* enter scope */
241
- rb_funcall(contrast_patcher(), rb_sym_enter_scope, 0);
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(contrast_patcher(), rb_sym_enter_method_scope, 1, method_policy);
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;