mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
feat(stdlib): vim.json.encode(...,{escape_slash:boolean}) #30561
Problem: vim.json.encode escapes every slash in string values (for example in file paths), and is not optional. Use-case is for preventing HTML injections (eg. injecting `</script>` closing tag); in the context of Nvim this is rarely useful. Solution: - Add a `escape_slash` flag to `vim.json.encode`. - Defaults to `false`. (This is a "breaking" change, but more like a bug fix.)
This commit is contained in:
committed by
GitHub
parent
fac96b72a5
commit
517ecb85f5
@@ -152,6 +152,45 @@ describe('vim.json.encode()', function()
|
||||
clear()
|
||||
end)
|
||||
|
||||
it('dumps strings with & without escaped slash', function()
|
||||
-- With slash
|
||||
eq('"Test\\/"', exec_lua([[return vim.json.encode('Test/', { escape_slash = true })]]))
|
||||
eq(
|
||||
'Test/',
|
||||
exec_lua([[return vim.json.decode(vim.json.encode('Test/', { escape_slash = true }))]])
|
||||
)
|
||||
|
||||
-- Without slash
|
||||
eq('"Test/"', exec_lua([[return vim.json.encode('Test/')]]))
|
||||
eq('"Test/"', exec_lua([[return vim.json.encode('Test/', {})]]))
|
||||
eq('"Test/"', exec_lua([[return vim.json.encode('Test/', { _invalid = true })]]))
|
||||
eq('"Test/"', exec_lua([[return vim.json.encode('Test/', { escape_slash = false })]]))
|
||||
eq(
|
||||
'"Test/"',
|
||||
exec_lua([[return vim.json.encode('Test/', { _invalid = true, escape_slash = false })]])
|
||||
)
|
||||
eq(
|
||||
'Test/',
|
||||
exec_lua([[return vim.json.decode(vim.json.encode('Test/', { escape_slash = false }))]])
|
||||
)
|
||||
|
||||
-- Checks for for global side-effects
|
||||
eq(
|
||||
'"Test/"',
|
||||
exec_lua([[
|
||||
vim.json.encode('Test/', { escape_slash = true })
|
||||
return vim.json.encode('Test/')
|
||||
]])
|
||||
)
|
||||
eq(
|
||||
'"Test\\/"',
|
||||
exec_lua([[
|
||||
vim.json.encode('Test/', { escape_slash = false })
|
||||
return vim.json.encode('Test/', { escape_slash = true })
|
||||
]])
|
||||
)
|
||||
end)
|
||||
|
||||
it('dumps strings', function()
|
||||
eq('"Test"', exec_lua([[return vim.json.encode('Test')]]))
|
||||
eq('""', exec_lua([[return vim.json.encode('')]]))
|
||||
|
||||
Reference in New Issue
Block a user