diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-03 22:21:25 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 00:23:03 +0300 |
| commit | 2eae5db069dc171f74cd863487655f6a88e5384d (patch) | |
| tree | 2d9d05e09978a2a44acbfbb8d651f240df3ca052 /uvim/src/testdir/test_plugin_tar.mnv | |
| parent | 473d922faed49241a5d29d9e37dc4819cd512006 (diff) | |
| download | Project-Tick-2eae5db069dc171f74cd863487655f6a88e5384d.tar.gz Project-Tick-2eae5db069dc171f74cd863487655f6a88e5384d.zip | |
NOISSUE rebrand vim to MNV's not Vim
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'uvim/src/testdir/test_plugin_tar.mnv')
| -rw-r--r-- | uvim/src/testdir/test_plugin_tar.mnv | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/uvim/src/testdir/test_plugin_tar.mnv b/uvim/src/testdir/test_plugin_tar.mnv new file mode 100644 index 0000000000..ce7c4fed6e --- /dev/null +++ b/uvim/src/testdir/test_plugin_tar.mnv @@ -0,0 +1,149 @@ +mnv9script + +CheckExecutable tar +CheckNotMSWindows + +runtime plugin/tarPlugin.mnv + +def CopyFile(source: string) + if !filecopy($"samples/{source}", "X.tar") + assert_report($"Can't copy samples/{source}") + endif +enddef + +def g:Test_tar_basic() + CopyFile("sample.tar") + defer delete("X.tar") + defer delete("./testtar", 'rf') + e X.tar + + ### Check header + assert_match('^" tar\.mnv 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('^$', getline(4)) + assert_match('testtar/', getline(5)) + assert_match('testtar/file1.txt', getline(6)) + + ### Check ENTER on header + :1 + exe ":normal \<cr>" + assert_equal("X.tar", @%) + + ### Check ENTER on file + :6 + exe ":normal \<cr>" + assert_equal("tarfile::testtar/file1.txt", @%) + + + ### Check editing file + ### Note: deleting entries not supported on BSD + if has("mac") + return + endif + if has("bsd") + return + endif + s/.*/some-content/ + assert_equal("some-content", getline(1)) + w! + assert_equal("tarfile::testtar/file1.txt", @%) + bw! + close + bw! + + e X.tar + :6 + exe "normal \<cr>" + assert_equal("some-content", getline(1)) + bw! + close + + ### Check extracting file + :5 + normal x + assert_true(filereadable("./testtar/file1.txt")) + bw! +enddef + +def g:Test_tar_evil() + CopyFile("evil.tar") + defer delete("X.tar") + defer delete("./etc", 'rf') + e X.tar + + ### Check header + assert_match('^" tar\.mnv 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)) + + ### Check ENTER on header + :1 + exe ":normal \<cr>" + assert_equal("X.tar", @%) + assert_equal(1, b:leading_slash) + + ### Check ENTER on file + :6 + exe ":normal \<cr>" + assert_equal(1, b:leading_slash) + assert_equal("tarfile::/etc/ax-pwn", @%) + + + ### Check editing file + ### Note: deleting entries not supported on BSD + if has("mac") + return + endif + if has("bsd") + return + endif + s/.*/none/ + assert_equal("none", getline(1)) + w! + assert_equal(1, b:leading_slash) + assert_equal("tarfile::/etc/ax-pwn", @%) + bw! + close + bw! + + # Writing was aborted + e X.tar + assert_match('^" Note: Path Traversal Attack detected', getline(4)) + :6 + exe "normal \<cr>" + assert_equal("something", getline(1)) + bw! + close + + ### Check extracting file + :5 + normal x + assert_true(filereadable("./etc/ax-pwn")) + + 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\.mnv 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 |
