Skip to content

Commit 9729bb5

Browse files
authored
Merge pull request #119 from Japannext/unquoted-fact-crash
Do not crash when referring to a fact key without quoting it
2 parents c12c5f4 + 9deeffa commit 9729bb5

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

lib/puppet-lint/plugins/legacy_facts/legacy_facts.rb

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,9 @@ def check
115115
tokens.select { |x| LEGACY_FACTS_VAR_TYPES.include?(x.type) }.each do |token|
116116
fact_name = ''
117117

118-
# This matches legacy facts defined in the fact hash that use the top scope
119-
# fact assignment.
120-
if token.value.start_with?('::facts[')
121-
fact_name = token.value.match(%r{::facts\['(.*)'\]})[1]
122-
123118
# This matches legacy facts defined in the fact hash.
124-
elsif token.value.start_with?("facts['")
125-
fact_name = token.value.match(%r{facts\['(.*)'\]})[1]
119+
if (match = (token.value.match(%r{(::)?facts\['(.*)'\]}) || token.value.match(%r{(::)?facts\[(.*)\]})))
120+
fact_name = match[2]
126121

127122
# This matches using legacy facts in a the new structured fact. For
128123
# example this would match 'uuid' in $facts['uuid'] so it can be converted

spec/unit/puppet-lint/plugins/legacy_facts/legacy_facts_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@
121121
expect(problems).to have(1).problem
122122
end
123123
end
124+
125+
context 'top scoped fact variable using unquoted legacy facts hash variable in interpolation' do
126+
let(:code) { '$::facts[osfamily]' }
127+
128+
it 'detects a single problem' do
129+
expect(problems).to have(1).problem
130+
end
131+
end
124132
end
125133

126134
context 'with fix enabled' do

0 commit comments

Comments
 (0)