mirror of
https://github.com/adrienverge/yamllint.git
synced 2025-02-25 18:55:20 -06:00
fix(line-length): Wrap token scanning securely
With `allow-non-breakable-inline-mappings` enabled, every long line is passed through `loader.peek_token()`. Even lines that are not valid YAML. For this reason, this code must be wrapped in a `try`/`except` block. Closes: #21
This commit is contained in:
parent
9b72a2d29a
commit
f656cf42d2
@ -32,6 +32,9 @@ class LineLengthTestCase(RuleTestCase):
|
||||
self.check('---\n' + 81 * 'a' + '\n', conf)
|
||||
self.check(1000 * 'b', conf)
|
||||
self.check('---\n' + 1000 * 'b' + '\n', conf)
|
||||
self.check('content: |\n'
|
||||
' {% this line is' + 99 * ' really' + ' long %}\n',
|
||||
conf)
|
||||
|
||||
def test_default(self):
|
||||
conf = ('line-length: {max: 80}\n'
|
||||
@ -145,3 +148,10 @@ class LineLengthTestCase(RuleTestCase):
|
||||
self.check('---\n'
|
||||
'- long line: and+some+space+at+the+end \n',
|
||||
conf, problem=(2, 21))
|
||||
|
||||
# See https://github.com/adrienverge/yamllint/issues/21
|
||||
conf = 'line-length: {allow-non-breakable-inline-mappings: yes}'
|
||||
self.check('---\n'
|
||||
'content: |\n'
|
||||
' {% this line is' + 99 * ' really' + ' long %}\n',
|
||||
conf, problem=(3, 81))
|
||||
|
@ -102,13 +102,18 @@ CONF = {'max': int,
|
||||
|
||||
def check_inline_mapping(line):
|
||||
loader = yaml.SafeLoader(line.content)
|
||||
while loader.peek_token():
|
||||
if isinstance(loader.get_token(), yaml.BlockMappingStartToken):
|
||||
while loader.peek_token():
|
||||
if isinstance(loader.get_token(), yaml.ValueToken):
|
||||
t = loader.get_token()
|
||||
if isinstance(t, yaml.ScalarToken):
|
||||
return ' ' not in line.content[t.start_mark.column:]
|
||||
try:
|
||||
while loader.peek_token():
|
||||
if isinstance(loader.get_token(), yaml.BlockMappingStartToken):
|
||||
while loader.peek_token():
|
||||
if isinstance(loader.get_token(), yaml.ValueToken):
|
||||
t = loader.get_token()
|
||||
if isinstance(t, yaml.ScalarToken):
|
||||
return (
|
||||
' ' not in line.content[t.start_mark.column:])
|
||||
except yaml.scanner.ScannerError:
|
||||
pass
|
||||
|
||||
return False
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user