contrast-agent 3.8.4 → 3.8.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da212693eda842e7117b2c758361ea67915854a4888b3ea0315c51f33951fea3
4
- data.tar.gz: d43b26947e6eb4219f97bf90542a3948077578617f925fa90a94d4151674e88e
3
+ metadata.gz: b789de55c662b3c95a253bac0ab731c931c0d97dad6fe7c6f827c40a17d64ed7
4
+ data.tar.gz: b7589a20f7d89191ca3b1633a93204fb7195f802272f2701b8d17553104979ae
5
5
  SHA512:
6
- metadata.gz: 017607d5a9cc4be26f5b970ae072851fb50a3487c9da3d625ed72d346bbbff29daec0dfd5cf2a9b5dcb1445512d9d951a77360980c9ec9f2c37f9759ff706598
7
- data.tar.gz: 2a17b8dd9099c3558c5d8d1a2ba085eaec28149ef0def59d04e129e0cd2f863e2e2a6e27ae9defa873163df7b539d6600a620d7674553a71a3899e3e1d426b60
6
+ metadata.gz: '00693f21684374256997ada3d2a40889c288e116931662126ab7305dd2504c5fbb5d6657acd03c215181fcc839950b5b7a3ceccb7f1a347d2b91e7ae8556cf3b'
7
+ data.tar.gz: d44389e25b56d8da40e9b9de424ac9189c5d5929d252e2e082d09643dcf79b9d65b5b2179524a09cc9ab0978c5158eea02bcb3d042df12dea2e09b4bdf99a7b2
@@ -2,13 +2,25 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'fileutils'
5
-
6
5
  unless find_header('funchook.h', ext_path)
7
6
 
8
7
  FUNCHOOK_DIR_NAME = 'funchook'
9
8
  FUNCHOOK_DIR = File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '..', FUNCHOOK_DIR_NAME))
10
9
 
11
10
  COMMANDS = ['./autogen.sh', './configure', 'make clean', 'make'].freeze
11
+ bundler_install_target_paths = []
12
+
13
+ possible_gem_paths = Gem.path # .path and .paths diverge in their return type - .path returns strings, .paths returns PathSupports
14
+ possible_gem_paths.each do |base_path|
15
+ contrast_gem_dir_search = File.join(base_path, '**', '*', 'contrast-agent-*')
16
+ extension_paths = Dir[contrast_gem_dir_search]
17
+ extension_paths.map! do |extension_path|
18
+ target_path = File.join(extension_path, 'shared_libraries')
19
+ FileUtils.mkdir_p(target_path)
20
+ target_path
21
+ end
22
+ bundler_install_target_paths += extension_paths
23
+ end
12
24
 
13
25
  puts 'Building funchook'
14
26
  COMMANDS.each do |command|
@@ -19,15 +31,15 @@ unless find_header('funchook.h', ext_path)
19
31
  end
20
32
 
21
33
  SOURCE_PATHS = [
22
- File.join('include', 'funchook.h'),
23
- File.join('src', 'libfunchook.dylib'),
24
- File.join('src', 'libfunchook.so')
34
+ File.join('include', 'funchook.h'),
35
+ File.join('src', 'libfunchook.dylib'),
36
+ File.join('src', 'libfunchook.so')
25
37
  ].freeze
26
38
 
27
- TARGET_PATHS = [
28
- File.expand_path(File.join(File.expand_path(__dir__), '..', 'shared_libraries')),
29
- File.expand_path(__dir__) # should be ext/
30
- ].freeze
39
+ TARGET_PATHS = ([
40
+ File.expand_path(File.join(File.expand_path(__dir__), '..', 'shared_libraries')),
41
+ File.expand_path(__dir__)
42
+ ] + (bundler_install_target_paths)).freeze
31
43
 
32
44
  puts 'Copying required files'
33
45
 
@@ -45,4 +57,5 @@ unless find_header('funchook.h', ext_path)
45
57
  end
46
58
  end
47
59
 
60
+
48
61
  have_header('funchook.h', ext_path)
@@ -14,64 +14,64 @@
14
14
  'configure.ac'
15
15
  ],
16
16
  {
17
- 'AC_REQUIRE_AUX_FILE' => 1,
18
- '_AM_COND_ELSE' => 1,
19
- 'AM_MAKEFILE_INCLUDE' => 1,
17
+ 'AC_PROG_LIBTOOL' => 1,
18
+ 'm4_sinclude' => 1,
19
+ 'AM_PROG_F77_C_O' => 1,
20
+ 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
21
+ 'AM_POT_TOOLS' => 1,
20
22
  'AC_CONFIG_SUBDIRS' => 1,
21
- 'AM_INIT_AUTOMAKE' => 1,
22
- 'AM_PROG_CC_C_O' => 1,
23
- 'AM_AUTOMAKE_VERSION' => 1,
24
- 'AC_INIT' => 1,
25
- '_AM_COND_IF' => 1,
26
- 'LT_CONFIG_LTDL_DIR' => 1,
27
- 'AC_FC_PP_SRCEXT' => 1,
28
- 'AM_PROG_CXX_C_O' => 1,
29
23
  'AM_NLS' => 1,
30
- 'm4_pattern_forbid' => 1,
31
- 'AM_PROG_AR' => 1,
32
- 'm4_pattern_allow' => 1,
33
- 'AH_OUTPUT' => 1,
34
- 'AM_XGETTEXT_OPTION' => 1,
35
- 'AC_FC_PP_DEFINE' => 1,
36
- 'AM_ENABLE_MULTILIB' => 1,
37
- 'm4_sinclude' => 1,
38
- 'AM_MAINTAINER_MODE' => 1,
39
- 'AM_GNU_GETTEXT' => 1,
40
- '_m4_warn' => 1,
41
- 'sinclude' => 1,
42
- '_AM_COND_ENDIF' => 1,
43
- 'AC_CANONICAL_HOST' => 1,
44
- 'AM_PROG_LIBTOOL' => 1,
45
- 'AC_CONFIG_LIBOBJ_DIR' => 1,
46
24
  'AC_FC_SRCEXT' => 1,
47
- 'AM_CONDITIONAL' => 1,
48
25
  'LT_SUPPORTED_TAG' => 1,
49
- 'AM_POT_TOOLS' => 1,
50
- 'AC_FC_FREEFORM' => 1,
51
- 'AC_CANONICAL_SYSTEM' => 1,
52
- 'AC_CANONICAL_BUILD' => 1,
53
- 'AM_PATH_GUILE' => 1,
26
+ 'AC_LIBSOURCE' => 1,
27
+ 'AC_CONFIG_LIBOBJ_DIR' => 1,
28
+ 'sinclude' => 1,
29
+ '_LT_AC_TAGCONFIG' => 1,
30
+ '_AM_COND_ELSE' => 1,
31
+ 'AM_PROG_LIBTOOL' => 1,
54
32
  'AC_SUBST' => 1,
33
+ '_AM_COND_ENDIF' => 1,
55
34
  'AM_PROG_FC_C_O' => 1,
56
- 'AM_SILENT_RULES' => 1,
57
- 'AC_PROG_LIBTOOL' => 1,
58
- 'AM_PROG_MOC' => 1,
59
- 'AM_PROG_F77_C_O' => 1,
60
- 'm4_include' => 1,
61
- 'AC_CANONICAL_TARGET' => 1,
62
- 'AC_CONFIG_FILES' => 1,
63
- 'include' => 1,
64
- 'AC_DEFINE_TRACE_LITERAL' => 1,
65
35
  '_AM_SUBST_NOTMAKE' => 1,
66
- 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
67
- 'AC_LIBSOURCE' => 1,
68
- 'AC_SUBST_TRACE' => 1,
36
+ 'AC_CONFIG_FILES' => 1,
37
+ 'AC_REQUIRE_AUX_FILE' => 1,
38
+ 'AM_PROG_MOC' => 1,
39
+ 'AH_OUTPUT' => 1,
40
+ 'AC_FC_PP_SRCEXT' => 1,
41
+ 'AM_MAINTAINER_MODE' => 1,
42
+ 'AM_PROG_CC_C_O' => 1,
69
43
  'AC_CONFIG_LINKS' => 1,
70
- '_LT_AC_TAGCONFIG' => 1,
44
+ '_m4_warn' => 1,
45
+ 'AM_PROG_CXX_C_O' => 1,
71
46
  'LT_INIT' => 1,
47
+ 'AM_PATH_GUILE' => 1,
48
+ 'LT_CONFIG_LTDL_DIR' => 1,
49
+ 'AC_FC_FREEFORM' => 1,
50
+ 'AM_XGETTEXT_OPTION' => 1,
51
+ 'AM_AUTOMAKE_VERSION' => 1,
52
+ 'include' => 1,
53
+ 'AC_CANONICAL_SYSTEM' => 1,
54
+ 'AM_INIT_AUTOMAKE' => 1,
55
+ 'm4_pattern_forbid' => 1,
56
+ 'AC_CONFIG_AUX_DIR' => 1,
57
+ 'AM_SILENT_RULES' => 1,
58
+ 'AM_PROG_AR' => 1,
59
+ 'AC_FC_PP_DEFINE' => 1,
72
60
  'AC_CONFIG_HEADERS' => 1,
73
61
  '_AM_MAKEFILE_INCLUDE' => 1,
74
- 'AC_CONFIG_AUX_DIR' => 1
62
+ 'AC_CANONICAL_BUILD' => 1,
63
+ 'AM_MAKEFILE_INCLUDE' => 1,
64
+ 'AM_CONDITIONAL' => 1,
65
+ 'm4_include' => 1,
66
+ 'AC_INIT' => 1,
67
+ 'AC_DEFINE_TRACE_LITERAL' => 1,
68
+ 'AC_SUBST_TRACE' => 1,
69
+ '_AM_COND_IF' => 1,
70
+ 'AC_CANONICAL_HOST' => 1,
71
+ 'm4_pattern_allow' => 1,
72
+ 'AM_GNU_GETTEXT' => 1,
73
+ 'AC_CANONICAL_TARGET' => 1,
74
+ 'AM_ENABLE_MULTILIB' => 1
75
75
  }
76
76
  ], 'Autom4te::Request' )
77
77
  );
@@ -10,7 +10,7 @@ generated by GNU Autoconf 2.69. Invocation command line was
10
10
  ## Platform. ##
11
11
  ## --------- ##
12
12
 
13
- hostname = 99183398-517c-41c3-9907-625f03502c54-9m4hk
13
+ hostname = 190fbedb-dc16-42d3-8ff7-6ac407e6f5f6-sf5wp
14
14
  uname -m = x86_64
15
15
  uname -r = 4.19.95-flatcar
16
16
  uname -s = Linux
@@ -326,7 +326,7 @@ generated by GNU Autoconf 2.69. Invocation command line was
326
326
  CONFIG_COMMANDS =
327
327
  $ ./config.status
328
328
 
329
- on 99183398-517c-41c3-9907-625f03502c54-9m4hk
329
+ on 190fbedb-dc16-42d3-8ff7-6ac407e6f5f6-sf5wp
330
330
 
331
331
  config.status:822: creating Makefile
332
332
  config.status:822: creating src/Makefile
@@ -47,10 +47,11 @@ module Contrast
47
47
  # service config option, we must first start up the service. Afterwards, we
48
48
  # must send agent startup messages no matter what the config options are.
49
49
  #
50
- # @param msg [Contrast::Api::Dtm::Message] the message to be sent.
50
+ # @param event [Contrast::Api::Dtm] One of the DTMs valid for the event
51
+ # field of Contrast::Api::Dtm::Message
51
52
  # @return [Array<Contrast::Api::Settings::AgentSettings>] the response from SpeedRacer or nil
52
53
  # if it failed to send or the service is unavailable.
53
- def send_to_speedracer msg
54
+ def send_to_speedracer event
54
55
  return if service_unavailable?
55
56
 
56
57
  @ensure_running.synchronize do
@@ -60,16 +61,14 @@ module Contrast
60
61
  build_service_context unless status.startup_messages_sent?
61
62
  end
62
63
 
63
- logger.debug_with_time(msg.cs__class.name) do
64
- logger.debug "[m__id__:#{ msg.__id__ }]\tSending message."
65
- response = speedracer.send_one msg
64
+ logger.debug_with_time(event.cs__class.name) do
65
+ response = speedracer.send_one event
66
66
  status.success!
67
- logger.debug "[m__id__:#{ msg.__id__ }]\tReceived response:#{ response ? response.__id__ : '[No Response]' } for message."
68
67
  response
69
68
  end
70
69
  rescue StandardError => e
71
70
  status.failure!
72
- logger.error(e, "Unable to send message=#{ msg.cs__class }.")
71
+ logger.error(e, "Unable to send #{ event.cs__class } message #{ event.__id__ }.")
73
72
  nil
74
73
  end
75
74
 
@@ -103,9 +102,13 @@ module Contrast
103
102
  # 1 initial attempt, + 3 potential retries.
104
103
  # The agent-service-api REQUIREMENTS.md spec mandates this #.
105
104
  4.times do
105
+ # TODO: RUBY-794 make Type & ID structured for parsing)
106
+ logger.debug("Immediately sending #{ agent_startup_msg.cs__class.name } event #{ agent_startup_msg.__id__ }.")
106
107
  next unless (agent_response = speedracer.send_one(agent_startup_msg))
107
108
 
108
109
  # Connection was successful
110
+ # TODO: RUBY-794 make Type & ID structured for parsing)
111
+ logger.debug("Immediately sending #{ app_startup_msg.cs__class.name } event #{ app_startup_msg.__id__ }.")
109
112
  app_response = speedracer.send_one(app_startup_msg)
110
113
  [agent_response, app_response].each do |msg|
111
114
  Contrast::Utils::ServiceResponseUtil.process_response msg
@@ -3,6 +3,6 @@
3
3
 
4
4
  module Contrast
5
5
  module Agent
6
- VERSION = '3.8.4'
6
+ VERSION = '3.8.5'
7
7
  end
8
8
  end
@@ -59,27 +59,14 @@ module Contrast
59
59
  is_service_started
60
60
  end
61
61
 
62
- def send_one msg
63
- case msg
64
- when Contrast::Api::Dtm::ServerActivity
65
- send_server_activity(msg)
66
- when Contrast::Api::Dtm::AgentStartup
67
- send_agent_startup(msg)
68
- when Contrast::Api::Dtm::ApplicationCreate
69
- send_application_create(msg)
70
- when Contrast::Api::Dtm::ApplicationUpdate
71
- send_application_update(msg)
72
- when Contrast::Api::Dtm::Activity
73
- send_application_activity(msg)
74
- when Contrast::Api::Dtm::HttpRequest
75
- send_prefilter(msg)
76
- when Contrast::Api::Dtm::HttpResponse
77
- send_postfilter(msg)
78
- when Contrast::Api::Dtm::Noop
79
- send_noop(msg)
80
- when Contrast::Api::Dtm::ObservedRoute
81
- send_observed_route(msg)
82
- end
62
+ # Wrap the given DTM in a Contrast::Api::Dtm::Message and send it to the
63
+ # Service for processing
64
+ #
65
+ # @param event [Contrast::Api::Dtm] One of the DTMs valid for the event field of
66
+ # Contrast::Api::Dtm::Message
67
+ def send_one event
68
+ msg = build_message(event)
69
+ send_message(msg)
83
70
  end
84
71
 
85
72
  private
@@ -124,58 +111,39 @@ module Contrast
124
111
  end
125
112
  end
126
113
 
127
- def send_server_activity server_activity
128
- msg = base_message
129
- msg.server_activity = server_activity
130
- send_message(msg)
131
- end
132
-
133
- def send_agent_startup agent_startup
134
- msg = base_message
135
- msg.agent_startup = agent_startup
136
- send_message(msg)
137
- end
138
-
139
- def send_application_create app_create
140
- msg = base_message
141
- msg.application_create = app_create
142
- send_message(msg)
143
- end
144
-
145
- def send_application_update app_update
146
- msg = base_message
147
- msg.application_update = app_update
148
- send_message(msg)
149
- end
150
-
151
- def send_application_activity activity
152
- msg = base_message
153
- msg.activity = activity
154
- send_message(msg)
155
- end
156
-
157
- def send_prefilter http_request
158
- msg = base_message
159
- msg.prefilter = http_request
160
- send_message(msg)
161
- end
162
-
163
- def send_postfilter http_response
164
- msg = base_message
165
- msg.postfilter = http_response
166
- send_message(msg)
167
- end
168
-
169
- def send_noop noop = nil
170
- msg = base_message
171
- msg.noop = noop || Contrast::Api::Dtm::Noop.new
172
- send_message(msg)
173
- end
174
-
175
- def send_observed_route observed_route
176
- msg = base_message
177
- msg.observed_route = observed_route
178
- send_message(msg)
114
+ # Wrap the given event in a Contrast::Api::Dtm::Message
115
+ #
116
+ # @param event [Contrast::Api::Dtm] One of the DTMs valid for the event field of
117
+ # Contrast::Api::Dtm::Message
118
+ # @return Contrast::Api::Dtm::Message
119
+ def build_message event
120
+ message = base_message
121
+ case event
122
+ when Contrast::Api::Dtm::ServerActivity
123
+ message.server_activity = event
124
+ when Contrast::Api::Dtm::AgentStartup
125
+ message.agent_startup = event
126
+ when Contrast::Api::Dtm::ApplicationCreate
127
+ message.application_create = event
128
+ when Contrast::Api::Dtm::ApplicationUpdate
129
+ message.application_update = event
130
+ when Contrast::Api::Dtm::Activity
131
+ message.activity = event
132
+ when Contrast::Api::Dtm::HttpRequest
133
+ message.prefilter = event
134
+ when Contrast::Api::Dtm::HttpResponse
135
+ message.postfilter = event
136
+ when Contrast::Api::Dtm::Noop
137
+ message.noop = event
138
+ when Contrast::Api::Dtm::ObservedRoute
139
+ message.observed_route = event
140
+ else
141
+ logger.error("Unknown event type #{ event.cs__class.name } received. Unsure how to send.")
142
+ return
143
+ end
144
+ # TODO: RUBY-794 make ID structured for parsing
145
+ logger.debug("Wrapping the event #{ event.__id__ } in message #{ message.__id__ } (#{ message.pid }-#{ message.message_count }.")
146
+ message
179
147
  end
180
148
 
181
149
  def base_message
@@ -192,10 +160,22 @@ module Contrast
192
160
  msg
193
161
  end
194
162
 
195
- def send_message message
196
- to_service = Contrast::Api::Dtm::Message.encode(message)
163
+ def send_message msg
164
+ # TODO: RUBY-794 make PID & Count structured for parsing
165
+ logger.debug "[m__id__:#{ msg.__id__ }]\tSending message #{ msg.pid }-#{ msg.message_count }."
166
+ to_service = Contrast::Api::Dtm::Message.encode(msg)
197
167
  from_service = send_marshaled(to_service)
198
- Contrast::Api::Settings::AgentSettings.decode(from_service)
168
+ response = Contrast::Api::Settings::AgentSettings.decode(from_service)
169
+ # TODO: RUBY-794 make PID & Count structured for parsing
170
+ log_message = "[m__id__:#{ msg.__id__ }]\tReceived response: " \
171
+ "#{ response ? response.__id__ : '[No Response]' } for " \
172
+ "message #{ msg.pid }-#{ msg.message_count }."
173
+ logger.debug(log_message)
174
+ response
175
+ rescue StandardError => e
176
+ # TODO: RUBY-794 make PID & Count structured for parsing
177
+ logger.error(e, "[m__id__:#{ msg.__id__ }]\tSending failed for message #{ msg.pid }-#{ msg.message_count }.")
178
+ raise e # reraise to let SocketClient manage the connection
199
179
  end
200
180
 
201
181
  def send_marshaled marshaled
@@ -84,11 +84,14 @@ module Contrast
84
84
  # handle it. The service response is not returned; rather, it is processed by the service sender
85
85
  # thread. All messages sent to SpeedRacer should be queued rather than sent unless the calling method
86
86
  # explicitly needs to act on the response object with custom logic (i.e. RequestContext#service_extract_response)
87
- # @param msg [Contrast::Api::Dtm::Message] the message to be sent
88
- def queue_message msg
89
- return unless msg
87
+ #
88
+ # @param event [Contrast::Api::Dtm] One of the DTMs valid for the event
89
+ # field of Contrast::Api::Dtm::Message
90
+ # TODO: rename method to queue_event
91
+ def queue_message event
92
+ return unless event
90
93
 
91
- Contrast::Utils::ServiceSenderUtil.push_to_ready_queue(msg)
94
+ Contrast::Utils::ServiceSenderUtil.push_to_ready_queue(event)
92
95
  end
93
96
 
94
97
  # TODO: RUBY-662. Add additional check before we queue/send a message to see if we were unable
@@ -98,12 +101,14 @@ module Contrast
98
101
  # to receive the response object back from SpeedRacer. An invoking method that needs
99
102
  # to process the response object with custom logic should use this method.
100
103
  #
101
- # @param msg [Contrast::Api::Dtm::Message] the message to be sent
104
+ # @param event [Contrast::Api::Dtm] One of the DTMs valid for the event
105
+ # field of Contrast::Api::Dtm::Message
102
106
  # @return [Array<Contrast::Api::Dtm::AttackResult>] the response from SpeedRacer
103
- def send_message msg
104
- return unless msg
107
+ # TODO: rename method to send_event
108
+ def send_message event
109
+ return unless event
105
110
 
106
- state.client.send_to_speedracer(msg)
111
+ state.client.send_to_speedracer(event)
107
112
  end
108
113
  end
109
114
 
@@ -18,11 +18,18 @@ module Contrast
18
18
  class << self
19
19
  attr_reader :assess_messages, :ready_messages_queue
20
20
 
21
- def push_to_ready_queue msg
21
+ # Push the given DTM into a queue to be sent to the Service.
22
+ #
23
+ # @param event [Contrast::Api::Dtm] One of the DTMs valid for the event field of
24
+ # Contrast::Api::Dtm::Message
25
+ def push_to_ready_queue event
26
+ return unless event
27
+
22
28
  # Since a message may try to be pushed before sending_thread starts up, we need to initialize
23
29
  # the queue on first message sent
24
30
  @ready_messages_queue ||= Queue.new
25
- ready_messages_queue.push msg
31
+ ready_messages_queue.push event
32
+ logger.debug("Enqueued the #{ event.cs__class.name } event #{ event.__id__ }.") # TODO: RUBY-794 make Type & ID structured for parsing)
26
33
  end
27
34
 
28
35
  def sending_thread
@@ -34,9 +41,10 @@ module Contrast
34
41
  loop do
35
42
  check_assess_queue if assess_messages # don't bother checking if assess queue is already cleared
36
43
  # if ready messages queue is empty, calling thread is suspended until a message is pushed onto queue
37
- msg = ready_messages_queue.pop
44
+ event = ready_messages_queue.pop
38
45
  begin
39
- response = Contrast::Agent::FeatureState.instance.client.send_to_speedracer msg
46
+ logger.debug("Dequeued the #{ event.cs__class.name } event #{ event.__id__ }.") # TODO: RUBY-794 make Type & ID structured for parsing)
47
+ response = Contrast::Agent::FeatureState.instance.client.send_to_speedracer event
40
48
  Contrast::Utils::ServiceResponseUtil.process_response(response) if response
41
49
  rescue StandardError => e
42
50
  logger.error(e, 'Could not send message to service from service sender thread.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contrast-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.4
4
+ version: 3.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - galen.palmer@contrastsecurity.com
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2020-04-16 00:00:00.000000000 Z
15
+ date: 2020-04-22 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -392,21 +392,21 @@ executables:
392
392
  - contrast_service
393
393
  extensions:
394
394
  - ext/cs__common/extconf.rb
395
+ - ext/cs__assess_basic_object/extconf.rb
396
+ - ext/cs__assess_marshal_module/extconf.rb
395
397
  - ext/cs__scope/extconf.rb
396
- - ext/cs__assess_module/extconf.rb
398
+ - ext/cs__assess_regexp/extconf.rb
399
+ - ext/cs__assess_hash/extconf.rb
400
+ - ext/cs__assess_fiber_track/extconf.rb
401
+ - ext/cs__assess_array/extconf.rb
397
402
  - ext/cs__assess_active_record_named/extconf.rb
398
403
  - ext/cs__assess_kernel/extconf.rb
399
- - ext/cs__assess_marshal_module/extconf.rb
400
- - ext/cs__assess_fiber_track/extconf.rb
401
- - ext/cs__assess_regexp/extconf.rb
402
- - ext/cs__assess_basic_object/extconf.rb
403
- - ext/cs__contrast_patch/extconf.rb
404
- - ext/cs__assess_string_interpolation26/extconf.rb
405
404
  - ext/cs__assess_regexp_track/extconf.rb
406
405
  - ext/cs__protect_kernel/extconf.rb
407
406
  - ext/cs__assess_string/extconf.rb
408
- - ext/cs__assess_array/extconf.rb
409
- - ext/cs__assess_hash/extconf.rb
407
+ - ext/cs__assess_string_interpolation26/extconf.rb
408
+ - ext/cs__contrast_patch/extconf.rb
409
+ - ext/cs__assess_module/extconf.rb
410
410
  extra_rdoc_files: []
411
411
  files:
412
412
  - ".clang-format"