patch 9.1.2135: tests: tar plugin does not consider 'nowrapscan'

Problem:  search() is used to check for the message from tar that
          indicates leading slashes found in the tar archive, or to
          check for the leading slashes themselves. However, if
          'nowrapscan' is in effect these searches are limited to the
          last line and don't find any results. This causes the warning
          message from tar to be seen in the buffer, the "Path Traversal
          Attack Detected" message to be omitted, and editing actions
          can fail. This can be seen, for example, when editing
          src/testdir/samples/evil.tar.
Solution: Use the 'w' flag for search() (Kevin Goodsell)

closes: #19333

Signed-off-by: Kevin Goodsell <kevin-opensource@omegacrash.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Kevin Goodsell
2026-02-06 10:00:13 +00:00
committed by Christian Brabandt
parent 56d470a008
commit 18d844e365
4 changed files with 37 additions and 1 deletions
+2 -1
View File
@@ -18,6 +18,7 @@
" 2025 May 19 by Vim Project: restore working directory after read/write
" 2025 Jul 13 by Vim Project: warn with path traversal attacks
" 2025 Jul 16 by Vim Project: update minimum vim version
" 2026 Feb 06 by Vim Project: consider 'nowrapscan' (#19333)
"
" Contains many ideas from Michael Toren's <tar.vim>
"
@@ -226,7 +227,7 @@ fun! tar#Browse(tarfile)
" remove tar: Removing leading '/' from member names
" Note: the message could be localized
if search('^tar: ') > 0 || search(g:tar_leading_pat) > 0
if search('^tar: ', 'w') > 0 || search(g:tar_leading_pat, 'w') > 0
call append(3,'" Note: Path Traversal Attack detected!')
let b:leading_slash = 1
" remove the message output
+12
View File
@@ -52490,4 +52490,16 @@ Patch 9.1.2134
Problem: Terminal doesn't handle split UTF-8 sequence after ASCII.
Solution: Only use one UTF-8 encoding state per vterm state (zeertzjq).
Patch 9.1.2135
Problem: search() is used to check for the message from tar that
indicates leading slashes found in the tar archive, or to
check for the leading slashes themselves. However, if
'nowrapscan' is in effect these searches are limited to the
last line and don't find any results. This causes the warning
message from tar to be seen in the buffer, the "Path Traversal
Attack Detected" message to be omitted, and editing actions
can fail. This can be seen, for example, when editing
src/testdir/samples/evil.tar.
Solution: Use the 'w' flag for search() (Kevin Goodsell)
vim:tw=78:ts=8:noet:ft=help:norl:fdm=manual:nofoldenable
+21
View File
@@ -126,3 +126,24 @@ def g:Test_tar_evil()
bw!
enddef
def g:Test_tar_path_traversal_with_nowrapscan()
CopyFile("evil.tar")
defer delete("X.tar")
# Make sure we still find the tar warning (or leading slashes) even when
# wrapscan is off
set nowrapscan
e X.tar
### Check header
assert_match('^" tar\.vim version v\d\+', getline(1))
assert_match('^" Browsing tarfile .*/X.tar', getline(2))
assert_match('^" Select a file with cursor and press ENTER, "x" to extract a file', getline(3))
assert_match('^" Note: Path Traversal Attack detected', getline(4))
assert_match('^$', getline(5))
assert_match('/etc/ax-pwn', getline(6))
assert_equal(1, b:leading_slash)
bw!
enddef
+2
View File
@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2135,
/**/
2134,
/**/