mirror of
https://github.com/neovim/neovim.git
synced 2026-09-04 13:20:34 +00:00
fix(ssh): compare table length in the SSH config #41637
Problem:
`parse_ssh_config()` compares tables against a freshly allocated empty
table.
- In `parse_multiple_values()`, the guard which avoids flushing an empty
accumulator never applies. Runs of separators and trailing whitespace
push empty strings into the results, and `is_valid()` does not filter
them. `Host alpha beta ` parses as `{ 'alpha', '', 'beta' }`.
- In `parse_value()`, the condition reduces to `chr == '"' and quoted`.
`quoted` starts false and only that branch sets it, so it can never
become true: quotes are never recognised and are inserted literally,
and the unterminated-quote check is unreachable.
Solution:
Compare `#val` instead. Add a test for repeated and trailing separators.
AI-assisted
This commit is contained in:
committed by
GitHub
parent
51eacf284c
commit
73923b0dd8
@@ -84,7 +84,7 @@ function M.parse_ssh_config(text)
|
||||
if escaped then
|
||||
table.insert(val, chr == '"' and chr or '\\' .. chr)
|
||||
escaped = false
|
||||
elseif chr == '"' and (val == {} or quoted) then
|
||||
elseif chr == '"' and (#val == 0 or quoted) then
|
||||
quoted = not quoted
|
||||
elseif chr == '\\' then
|
||||
escaped = true
|
||||
@@ -127,7 +127,7 @@ function M.parse_ssh_config(text)
|
||||
elseif quoted then
|
||||
table.insert(val, chr)
|
||||
elseif chr:match('[ \t=]') then
|
||||
if val ~= {} then
|
||||
if #val > 0 then
|
||||
table.insert(results, vim.trim(table.concat(val)))
|
||||
val = {}
|
||||
end
|
||||
@@ -143,7 +143,7 @@ function M.parse_ssh_config(text)
|
||||
error('Unexpected line break at line ' .. line)
|
||||
end
|
||||
|
||||
if val ~= {} then
|
||||
if #val > 0 then
|
||||
table.insert(results, vim.trim(table.concat(val)))
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user