" 2025 Jul 16 by Vim Project: update minimum vim version
" 2026 Feb 06 by Vim Project: consider 'nowrapscan' (#19333)
" 2026 Feb 07 by Vim Project: make the path traversal detection more robust (#19341)
+" 2026 Apr 06 by Vim Project: fix bugs with lz4 support (#19925)
"
" Contains many ideas from Michael Toren's <tar.vim>
"
endif
elseif filereadable(tarbase.".tlz4")
- let extractcmd= substitute(extractcmd,"-","-I lz4","")
+ if has("linux")
+ let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
+ endif
call system(extractcmd." ".shellescape(tarbase).".tlz4 ".shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tlz4 {fname}: failed!")
endif
elseif filereadable(tarbase.".tar.lz4")
- let extractcmd= substitute(extractcmd,"-","-I lz4","")
- call system(extractcmd." ".shellescape(tarbase).".tar.lz4".shellescape(fname))
+ if has("linux")
+ let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
+ endif
+ call system(extractcmd." ".shellescape(tarbase).".tar.lz4 ".shellescape(fname))
if v:shell_error != 0
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.lz4 {fname}: failed!")
else
bw!
enddef
+
+def g:Test_tar_lz4_extract()
+ CheckExecutable lz4
+
+ delete('X.txt')
+ delete('Xarchive.tar')
+ delete('Xarchive.tar.lz4')
+ call writefile(['hello'], 'X.txt')
+ call system('tar -cf Xarchive.tar X.txt')
+ assert_equal(0, v:shell_error)
+
+ call system('lz4 -z Xarchive.tar Xarchive.tar.lz4')
+ assert_equal(0, v:shell_error)
+
+ delete('X.txt')
+ delete('Xarchive.tar')
+ defer delete('Xarchive.tar.lz4')
+
+ e Xarchive.tar.lz4
+ assert_match('X.txt', getline(5))
+ :5
+ normal x
+ assert_true(filereadable('X.txt'))
+ assert_equal(['hello'], readfile('X.txt'))
+ delete('X.txt')
+ bw!
+enddef
+
+def g:Test_tlz4_extract()
+ CheckExecutable lz4
+
+ delete('X.txt')
+ delete('Xarchive.tar')
+ delete('Xarchive.tlz4')
+ call writefile(['goodbye'], 'X.txt')
+ call system('tar -cf Xarchive.tar X.txt')
+ assert_equal(0, v:shell_error)
+
+ call system('lz4 -z Xarchive.tar Xarchive.tlz4')
+ assert_equal(0, v:shell_error)
+
+ delete('X.txt')
+ delete('Xarchive.tar')
+ defer delete('Xarchive.tlz4')
+
+ e Xarchive.tlz4
+ assert_match('X.txt', getline(5))
+ :5
+ normal x
+ assert_true(filereadable('X.txt'))
+ assert_equal(['goodbye'], readfile('X.txt'))
+ delete('X.txt')
+ bw!
+enddef
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 306,
/**/
305,
/**/