diff options
author | Tyler Miller <tmillr@proton.me> | 2023-08-01 08:28:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-01 08:28:28 -0700 |
commit | 0804034c07ad5883bc653d054e549a87d429a8b7 (patch) | |
tree | bd067936c811a26051f15c37986e0ffe5214cef9 /test/functional/lua/loader_spec.lua | |
parent | dfe19d6e0047ea2a2a75dff0c57f4c4de1c0196a (diff) | |
download | rneovim-0804034c07ad5883bc653d054e549a87d429a8b7.tar.gz rneovim-0804034c07ad5883bc653d054e549a87d429a8b7.tar.bz2 rneovim-0804034c07ad5883bc653d054e549a87d429a8b7.zip |
fix(loader): cache path ambiguity #24491
Problem: cache paths are derived by replacing each reserved/filesystem-
path-sensitive char with a `%` char in the original path. With this
method, two different files at two different paths (each containing `%`
chars) can erroneously resolve to the very same cache path in certain
edge-cases.
Solution: derive cache paths by url-encoding the original (path) instead
using `vim.uri_encode()` with `"rfc2396"`. Increment `Loader.VERSION` to
denote this change.
Diffstat (limited to 'test/functional/lua/loader_spec.lua')
-rw-r--r-- | test/functional/lua/loader_spec.lua | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/functional/lua/loader_spec.lua b/test/functional/lua/loader_spec.lua index e2958d1592..34c36b04ef 100644 --- a/test/functional/lua/loader_spec.lua +++ b/test/functional/lua/loader_spec.lua @@ -33,4 +33,24 @@ describe('vim.loader', function() return _G.TEST ]], tmp)) end) + + it('handles % signs in modpath (#24491)', function() + exec_lua[[ + vim.loader.enable() + ]] + + local tmp1, tmp2 = (function (t) + assert(os.remove(t)) + assert(helpers.mkdir(t)) + assert(helpers.mkdir(t .. '/%')) + return t .. '/%/x', t .. '/%%x' + end)(helpers.tmpname()) + + helpers.write_file(tmp1, 'return 1', true) + helpers.write_file(tmp2, 'return 2', true) + vim.uv.fs_utime(tmp1, 0, 0) + vim.uv.fs_utime(tmp2, 0, 0) + eq(1, exec_lua('return loadfile(...)()', tmp1)) + eq(2, exec_lua('return loadfile(...)()', tmp2)) + end) end) |