puppet-lint-check_unsafe_interpolations 0.0.2 → 0.0.4

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: c3d2714593f074f68ed3f6007f39ab2ed2d5515d9aeaaae54edd8cf7466e76e8
4
- data.tar.gz: 86f891f98659f45310d6d96d6bec2ba69dffa80acea18d5988a510c908f4179b
3
+ metadata.gz: 7030c967d7f3f39c1829abe1d620bd93c22e556e0ff9238e2197ef65c3faba27
4
+ data.tar.gz: 6b7397d25a2e92fee44bae25c3b3386b66468d7adf7c6c51f1a3044ae8db00ea
5
5
  SHA512:
6
- metadata.gz: 1849165b7b86786474856c179cdd7c9f6ac809a18ded4a7fed043d2a98a31c2d299a53134ccf7b3812f3d7d3c0ea07979fb340275519b5f41d58a61a69e3be50
7
- data.tar.gz: ba4c9501c985599355ac72ed120bcf2ef41e6120d72cca724c27cc6e63d0a5d85d12c2cb1a77a08c5c9e27e051dae53911317b9c5d55a12aa152f02c3922666f
6
+ metadata.gz: c91e94e645dae141e93b74324f16c88a4ede801d56e1f501e994500d99ebc4ae418f9c25107c081d513ca23db3040455de97915f7c753bb00ae1481419fd6493
7
+ data.tar.gz: 93f689e32e264b4aa107a9986d1f17692bd55ec34863263f73cdc642b02d6eff894cedd10bbf8dbf554ca66b1b2e0a636ae1bbb047bbb22dc56ffa799f5bf7f7
@@ -1,6 +1,7 @@
1
1
  PuppetLint.new_check(:check_unsafe_interpolations) do
2
2
  COMMANDS = Array['command', 'onlyif', 'unless']
3
3
  INTERPOLATED_STRINGS = Array[:DQPRE, :DQMID]
4
+ USELESS_CHARS = Array[:WHITESPACE, :COMMA]
4
5
  def check
5
6
  # Gather any exec commands' resources into an array
6
7
  exec_resources = resource_indexes.map { |resource|
@@ -8,14 +9,9 @@ PuppetLint.new_check(:check_unsafe_interpolations) do
8
9
  resource if resource[:type].value == 'exec' && !(COMMANDS & resource_parameters).empty?
9
10
  }.compact
10
11
 
11
- # Filter the list of titles returned by get_title_tokens for those contained in an exec
12
- exec_title_tokens = get_title_tokens.select { |title|
13
- title if title[:resource_type].value == 'exec'
14
- }.compact
15
-
16
12
  # Iterate over title tokens and raise a warning if any are variables
17
- unless exec_title_tokens.empty?
18
- exec_title_tokens.each do |title|
13
+ unless get_exec_titles.empty?
14
+ get_exec_titles.each do |title|
19
15
  check_unsafe_title(title)
20
16
  end
21
17
  end
@@ -28,7 +24,7 @@ PuppetLint.new_check(:check_unsafe_interpolations) do
28
24
 
29
25
  # Iterate over the tokens in a title and raise a warning if an interpolated variable is found
30
26
  def check_unsafe_title(title)
31
- title[:tokens].each do |token|
27
+ title.each do |token|
32
28
  notify_warning(token.next_code_token) if interpolated?(token)
33
29
  end
34
30
  end
@@ -83,43 +79,36 @@ PuppetLint.new_check(:check_unsafe_interpolations) do
83
79
 
84
80
  # This function is a replacement for puppet_lint's title_tokens function which assumes titles have single quotes
85
81
  # This function adds a check for titles in double quotes where there could be interpolated variables
86
- def get_title_tokens
82
+ def get_exec_titles
87
83
  result = []
88
84
  tokens.each_index do |token_idx|
89
- next unless tokens[token_idx].type == :COLON
85
+ next unless ['exec'].include?(tokens[token_idx].value)
86
+ # We have a resource declaration. Now find the title
90
87
  tokens_array = []
91
88
  # Check if title is an array
92
- if tokens[token_idx - 1].type == :RBRACK
93
- array_start_idx = tokens.rindex do |r|
94
- r.type == :LBRACK
95
- end
96
- title_array_tokens = tokens[(array_start_idx + 1)..(token_idx - 2)]
97
- tokens_array.concat(title_array_tokens.select do |token|
98
- { STRING: true, NAME: true }.include?(token.type)
89
+ if tokens[token_idx].next_code_token.next_code_token.type == :LBRACK
90
+ # Get the start and end indices of the array of titles
91
+ array_start_idx = tokens.rindex { |r| r.type == :LBRACK }
92
+ array_end_idx = tokens.rindex { |r| r.type == :RBRACK }
93
+
94
+ # Grab everything within the array
95
+ title_array_tokens = tokens[(array_start_idx + 1)..(array_end_idx - 1)]
96
+ tokens_array.concat(title_array_tokens.reject do |token|
97
+ USELESS_CHARS.include?(token.type)
99
98
  end)
100
- result << {
101
- tokens: tokens_array,
102
- resource_type: tokens[array_start_idx].prev_code_token.prev_code_token
103
- }
99
+ result << tokens_array
104
100
  # Check if title is double quotes string
105
- elsif tokens[token_idx - 1].type == :DQPOST
106
- # Find index of the start of the title
107
- title_start_idx = tokens.rindex do |r|
108
- r.type == :DQPRE
109
- end
110
- result << {
111
- # Title is tokens from :DQPRE to the index before :COLON
112
- tokens: tokens[title_start_idx..(token_idx - 1)],
113
- resource_type: tokens[title_start_idx].prev_code_token.prev_code_token
114
- }
101
+ elsif tokens[token_idx].next_code_token.next_code_token.type == :DQPRE
102
+ # Find the start and end of the title
103
+ title_start_idx = tokens.rindex { |r| r.type == :DQPRE }
104
+ title_end_idx = tokens.rindex { |r| r.type == :DQPOST }
105
+
106
+ result << tokens[title_start_idx..title_end_idx]
115
107
  # Title is in single quotes
116
108
  else
117
- next_token = tokens[token_idx].next_code_token
118
- tokens_array.concat([tokens[token_idx - 1]]) unless next_token.type == :LBRACE
119
- result << {
120
- tokens: tokens_array,
121
- resource_type: tokens[token_idx - 1].prev_code_token.prev_code_token
122
- }
109
+ tokens_array.concat([tokens[token_idx].next_code_token.next_code_token])
110
+
111
+ result << tokens_array
123
112
  end
124
113
  end
125
114
  result
@@ -1,4 +1,4 @@
1
1
  # version of this gem
2
2
  class CheckUnsafeInterpolations
3
- VERSION ||= '0.0.2'.freeze
3
+ VERSION ||= '0.0.4'.freeze
4
4
  end
@@ -160,5 +160,27 @@ describe 'check_unsafe_interpolations' do
160
160
  expect(problems).to have(1).problems
161
161
  end
162
162
  end
163
+
164
+ context 'case statement and an exec' do
165
+ let(:code) do
166
+ <<-PUPPET
167
+ class foo {
168
+ case bar {
169
+ baz : {
170
+ echo qux
171
+ }
172
+ }
173
+
174
+ exec { 'foo':
175
+ command => "echo bar",
176
+ }
177
+ }
178
+ PUPPET
179
+ end
180
+
181
+ it 'detects zero problems' do
182
+ expect(problems).to have(0).problems
183
+ end
184
+ end
163
185
  end
164
186
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-lint-check_unsafe_interpolations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-06 00:00:00.000000000 Z
11
+ date: 2022-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puppet-lint
@@ -54,7 +54,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
- version: '2.7'
57
+ version: '2.5'
58
58
  required_rubygems_version: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="