From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: blees@dcon.de, gitster@pobox.com, kyle@kyleam.com,
sxlijin@gmail.com, Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 0/8] Directory traversal bugs
Date: Tue, 10 Dec 2019 20:00:19 +0000 [thread overview]
Message-ID: <pull.676.v2.git.git.1576008027.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.676.git.git.1575924465.gitgitgadget@gmail.com>
This series fixes multiple fill_directory() bugs, one of them new to 2.24.0
coming from en/clean-nested-with-ignored-topic, the rest having been around
in versions of git going back up to a decade.
See https://lore.kernel.org/git/87fti15agv.fsf@kyleam.com/ for the report
spawning this series.
Changes since v1:
* Testcase cleanups and tweaks suggested by Denton
* A tweak to this cover letter so that gitgitgadget will hopefully pick up
the cc-list. (It apparently needs to be 'Cc' now, instead of 'CC')
Elijah Newren (8):
t3011: demonstrate directory traversal failures
Revert "dir.c: make 'git-status --ignored' work within leading
directories"
dir: remove stray quote character in comment
dir: exit before wildcard fall-through if there is no wildcard
dir: break part of read_directory_recursive() out for reuse
dir: fix checks on common prefix directory
dir: synchronize treat_leading_path() and read_directory_recursive()
dir: consolidate similar code in treat_directory()
dir.c | 174 +++++++++++----
...common-prefixes-and-directory-traversal.sh | 209 ++++++++++++++++++
t/t7061-wtstatus-ignore.sh | 9 +-
3 files changed, 341 insertions(+), 51 deletions(-)
create mode 100755 t/t3011-common-prefixes-and-directory-traversal.sh
base-commit: da72936f544fec5a335e66432610e4cef4430991
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-676%2Fnewren%2Fls-files-bug-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-676/newren/ls-files-bug-v2
Pull-Request: https://github.com/git/git/pull/676
Range-diff vs v1:
1: 4b24ba9966 ! 1: 6d659b2302 t3011: demonstrate directory traversal failures
@@ -36,8 +36,10 @@
+ git init untracked_repo &&
+ >untracked_repo/empty &&
+
-+ echo ignored >.gitignore &&
-+ echo an_ignored_dir/ >>.gitignore &&
++ cat <<-EOF >.gitignore &&
++ ignored
++ an_ignored_dir/
++ EOF
+ mkdir an_ignored_dir &&
+ mkdir an_untracked_dir &&
+ >an_ignored_dir/ignored &&
@@ -114,52 +116,60 @@
+'
+
+test_expect_failure 'git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only' '
-+ echo untracked_dir/empty >expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_dir/empty
++ untracked_repo/
++ EOF
+ git ls-files -o untracked_dir untracked_repo >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git ls-files -o untracked_dir/ untracked_repo/ recurses into untracked_dir only' '
-+ echo untracked_dir/empty >expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_dir/empty
++ untracked_repo/
++ EOF
+ git ls-files -o untracked_dir/ untracked_repo/ >actual &&
+ test_cmp expect actual
+'
+
+test_expect_failure 'git ls-files -o --directory untracked_dir untracked_repo does not recurse' '
-+ echo untracked_dir/ >expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_dir/
++ untracked_repo/
++ EOF
+ git ls-files -o --directory untracked_dir untracked_repo >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git ls-files -o --directory untracked_dir/ untracked_repo/ does not recurse' '
-+ echo untracked_dir/ >expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_dir/
++ untracked_repo/
++ EOF
+ git ls-files -o --directory untracked_dir/ untracked_repo/ >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git ls-files -o .git shows nothing' '
-+ >expect &&
+ git ls-files -o .git >actual &&
-+ test_cmp expect actual
++ test_must_be_empty actual
+'
+
+test_expect_failure 'git ls-files -o .git/ shows nothing' '
-+ >expect &&
+ git ls-files -o .git/ >actual &&
-+ test_cmp expect actual
++ test_must_be_empty actual
+'
+
+test_expect_success FUNNYNAMES 'git ls-files -o untracked_* recurses appropriately' '
+ mkdir "untracked_*" &&
+ >"untracked_*/empty" &&
+
-+ echo "untracked_*/empty" >expect &&
-+ echo untracked_dir/empty >>expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_*/empty
++ untracked_dir/empty
++ untracked_repo/
++ EOF
+ git ls-files -o "untracked_*" >actual &&
+ test_cmp expect actual
+'
@@ -170,25 +180,31 @@
+# must match the full path; it doesn't check it for matching a leading
+# directory.
+test_expect_failure FUNNYNAMES 'git ls-files -o untracked_*/ recurses appropriately' '
-+ echo "untracked_*/empty" >expect &&
-+ echo untracked_dir/empty >>expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_*/empty
++ untracked_dir/empty
++ untracked_repo/
++ EOF
+ git ls-files -o "untracked_*/" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success FUNNYNAMES 'git ls-files -o --directory untracked_* does not recurse' '
-+ echo "untracked_*/" >expect &&
-+ echo untracked_dir/ >>expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_*/
++ untracked_dir/
++ untracked_repo/
++ EOF
+ git ls-files -o --directory "untracked_*" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success FUNNYNAMES 'git ls-files -o --directory untracked_*/ does not recurse' '
-+ echo "untracked_*/" >expect &&
-+ echo untracked_dir/ >>expect &&
-+ echo untracked_repo/ >>expect &&
++ cat <<-EOF >expect &&
++ untracked_*/
++ untracked_dir/
++ untracked_repo/
++ EOF
+ git ls-files -o --directory "untracked_*/" >actual &&
+ test_cmp expect actual
+'
2: bfaf7592ee ! 2: 79f2b56174 Revert "dir.c: make 'git-status --ignored' work within leading directories"
@@ -83,7 +83,9 @@
-test_expect_success 'status prefixed untracked directory with --ignored' '
+test_expect_failure 'status of untracked directory with --ignored works with or without prefix' '
-+ git status --porcelain --ignored | grep untracked/ >actual &&
++ git status --porcelain --ignored >tmp &&
++ grep untracked/ tmp >actual &&
++ rm tmp &&
+ test_cmp expected actual &&
+
git status --porcelain --ignored untracked/ >actual &&
3: ea2588e87c = 3: d6f858cab1 dir: remove stray quote character in comment
4: c3220758ab ! 4: 8d2d98eec3 dir: exit before wildcard fall-through if there is no wildcard
@@ -37,15 +37,15 @@
-test_expect_failure 'git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only' '
+test_expect_success 'git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only' '
- echo untracked_dir/empty >expect &&
- echo untracked_repo/ >>expect &&
- git ls-files -o untracked_dir untracked_repo >actual &&
+ cat <<-EOF >expect &&
+ untracked_dir/empty
+ untracked_repo/
@@
test_cmp expect actual
'
-test_expect_failure 'git ls-files -o --directory untracked_dir untracked_repo does not recurse' '
+test_expect_success 'git ls-files -o --directory untracked_dir untracked_repo does not recurse' '
- echo untracked_dir/ >expect &&
- echo untracked_repo/ >>expect &&
- git ls-files -o --directory untracked_dir untracked_repo >actual &&
+ cat <<-EOF >expect &&
+ untracked_dir/
+ untracked_repo/
5: 738d9ae4c9 = 5: d2f5623bd7 dir: break part of read_directory_recursive() out for reuse
6: b897095136 ! 6: 9839aca00a dir: fix checks on common prefix directory
@@ -164,11 +164,11 @@
git ls-files -o untracked_repo/ >actual &&
test_cmp expect actual
@@
- test_cmp expect actual
+ test_must_be_empty actual
'
-test_expect_failure 'git ls-files -o .git/ shows nothing' '
+test_expect_success 'git ls-files -o .git/ shows nothing' '
- >expect &&
git ls-files -o .git/ >actual &&
- test_cmp expect actual
+ test_must_be_empty actual
+ '
7: 4f8bf05d26 ! 7: df7f08886a dir: synchronize treat_leading_path() and read_directory_recursive()
@@ -104,6 +104,6 @@
-test_expect_failure 'status of untracked directory with --ignored works with or without prefix' '
+test_expect_success 'status of untracked directory with --ignored works with or without prefix' '
- git status --porcelain --ignored | grep untracked/ >actual &&
- test_cmp expected actual &&
-
+ git status --porcelain --ignored >tmp &&
+ grep untracked/ tmp >actual &&
+ rm tmp &&
8: 2200bf144a = 8: 77b57e44fd dir: consolidate similar code in treat_directory()
--
gitgitgadget
next prev parent reply other threads:[~2019-12-10 20:00 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-09 20:47 [PATCH 0/8] Directory traversal bugs Elijah Newren via GitGitGadget
2019-12-09 20:47 ` [PATCH 1/8] t3011: demonstrate directory traversal failures Elijah Newren via GitGitGadget
2019-12-09 21:06 ` Denton Liu
2019-12-09 20:47 ` [PATCH 2/8] Revert "dir.c: make 'git-status --ignored' work within leading directories" Elijah Newren via GitGitGadget
2019-12-09 21:32 ` Denton Liu
2019-12-09 21:51 ` Elijah Newren
2019-12-09 22:09 ` Eric Sunshine
2019-12-09 20:47 ` [PATCH 3/8] dir: remove stray quote character in comment Elijah Newren via GitGitGadget
2019-12-09 20:47 ` [PATCH 4/8] dir: exit before wildcard fall-through if there is no wildcard Elijah Newren via GitGitGadget
2019-12-09 20:47 ` [PATCH 5/8] dir: break part of read_directory_recursive() out for reuse Elijah Newren via GitGitGadget
2019-12-09 20:47 ` [PATCH 6/8] dir: fix checks on common prefix directory Elijah Newren via GitGitGadget
2019-12-09 20:47 ` [PATCH 7/8] dir: synchronize treat_leading_path() and read_directory_recursive() Elijah Newren via GitGitGadget
2019-12-09 20:47 ` [PATCH 8/8] dir: consolidate similar code in treat_directory() Elijah Newren via GitGitGadget
2019-12-10 20:00 ` Elijah Newren via GitGitGadget [this message]
2019-12-10 20:00 ` [PATCH v2 1/8] t3011: demonstrate directory traversal failures Elijah Newren via GitGitGadget
2019-12-10 20:00 ` [PATCH v2 2/8] Revert "dir.c: make 'git-status --ignored' work within leading directories" Elijah Newren via GitGitGadget
2019-12-10 20:00 ` [PATCH v2 3/8] dir: remove stray quote character in comment Elijah Newren via GitGitGadget
2019-12-10 20:00 ` [PATCH v2 4/8] dir: exit before wildcard fall-through if there is no wildcard Elijah Newren via GitGitGadget
2019-12-10 20:00 ` [PATCH v2 5/8] dir: break part of read_directory_recursive() out for reuse Elijah Newren via GitGitGadget
2019-12-10 20:00 ` [PATCH v2 6/8] dir: fix checks on common prefix directory Elijah Newren via GitGitGadget
2019-12-15 10:29 ` Johannes Schindelin
2019-12-16 13:51 ` Elijah Newren
2019-12-16 16:00 ` Elijah Newren
2019-12-16 18:13 ` Junio C Hamano
2019-12-16 21:08 ` Elijah Newren
2019-12-16 21:25 ` Junio C Hamano
2019-12-16 22:39 ` Elijah Newren
2019-12-17 0:04 ` Johannes Schindelin
2019-12-17 0:14 ` Junio C Hamano
2019-12-17 11:08 ` Johannes Schindelin
2019-12-17 17:33 ` Junio C Hamano
2019-12-17 19:32 ` Johannes Schindelin
2019-12-17 5:26 ` Elijah Newren
2019-12-17 11:15 ` Johannes Schindelin
2019-12-17 16:58 ` Elijah Newren
2019-12-10 20:00 ` [PATCH v2 7/8] dir: synchronize treat_leading_path() and read_directory_recursive() Elijah Newren via GitGitGadget
2019-12-10 20:00 ` [PATCH v2 8/8] dir: consolidate similar code in treat_directory() Elijah Newren via GitGitGadget
2019-12-17 8:33 ` [PATCH v3 0/3] Directory traversal bugs Elijah Newren via GitGitGadget
2019-12-17 8:33 ` [PATCH v3 1/3] t3011: demonstrate directory traversal failures Elijah Newren via GitGitGadget
2019-12-17 8:33 ` [PATCH v3 2/3] dir: remove stray quote character in comment Elijah Newren via GitGitGadget
2019-12-17 8:33 ` [PATCH v3 3/3] dir: exit before wildcard fall-through if there is no wildcard Elijah Newren via GitGitGadget
2019-12-17 11:18 ` [PATCH v3 0/3] Directory traversal bugs Johannes Schindelin
2019-12-17 18:24 ` Junio C Hamano
2019-12-21 22:05 ` Johannes Schindelin
2019-12-18 19:29 ` [PATCH v4 0/8] " Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 1/8] t3011: demonstrate directory traversal failures Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 2/8] Revert "dir.c: make 'git-status --ignored' work within leading directories" Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 3/8] dir: remove stray quote character in comment Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 4/8] dir: exit before wildcard fall-through if there is no wildcard Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 5/8] dir: break part of read_directory_recursive() out for reuse Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 6/8] dir: fix checks on common prefix directory Elijah Newren via GitGitGadget
2019-12-18 21:29 ` Junio C Hamano
2019-12-19 20:23 ` Elijah Newren
2019-12-19 22:24 ` Jeff King
2019-12-20 17:00 ` Elijah Newren
2019-12-20 21:14 ` Jeff King
2019-12-20 18:01 ` Junio C Hamano
2019-12-20 21:15 ` Jeff King
2019-12-18 19:29 ` [PATCH v4 7/8] dir: synchronize treat_leading_path() and read_directory_recursive() Elijah Newren via GitGitGadget
2019-12-18 19:29 ` [PATCH v4 8/8] dir: consolidate similar code in treat_directory() Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 0/8] Directory traversal bugs Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 1/8] t3011: demonstrate directory traversal failures Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 2/8] Revert "dir.c: make 'git-status --ignored' work within leading directories" Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 3/8] dir: remove stray quote character in comment Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 4/8] dir: exit before wildcard fall-through if there is no wildcard Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 5/8] dir: break part of read_directory_recursive() out for reuse Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 6/8] dir: fix checks on common prefix directory Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 7/8] dir: synchronize treat_leading_path() and read_directory_recursive() Elijah Newren via GitGitGadget
2019-12-19 21:28 ` [PATCH v5 8/8] dir: consolidate similar code in treat_directory() Elijah Newren via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.676.v2.git.git.1576008027.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=blees@dcon.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kyle@kyleam.com \
--cc=sxlijin@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.