| From 7be9f6f27a64c2041fd9bbeaa61d6193c70c1614 Mon Sep 17 00:00:00 2001 |
| From: Johannes Schindelin <johannes.schindelin@gmx.de> |
| Date: Wed, 28 Aug 2019 12:22:17 +0200 |
| Subject: path: also guard `.gitmodules` against NTFS Alternate Data Streams |
| |
| commit 91bd46588e6959e6903e275f78b10bd07830d547 upstream. |
| |
| We just safe-guarded `.git` against NTFS Alternate Data Stream-related |
| attack vectors, and now it is time to do the same for `.gitmodules`. |
| |
| Note: In the added regression test, we refrain from verifying all kinds |
| of variations between short names and NTFS Alternate Data Streams: as |
| the new code disallows _all_ Alternate Data Streams of `.gitmodules`, it |
| is enough to test one in order to know that all of them are guarded |
| against. |
| |
| Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> |
| Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> |
| --- |
| path.c | 2 +- |
| t/t0060-path-utils.sh | 7 ++++++- |
| 2 files changed, 7 insertions(+), 2 deletions(-) |
| |
| diff --git a/path.c b/path.c |
| index 4ab11c8d45..93e321bbd0 100644 |
| --- a/path.c |
| +++ b/path.c |
| @@ -1300,7 +1300,7 @@ static int is_ntfs_dot_generic(const char *name, |
| only_spaces_and_periods: |
| for (;;) { |
| char c = name[i++]; |
| - if (!c) |
| + if (!c || c == ':') |
| return 1; |
| if (c != ' ' && c != '.') |
| return 0; |
| diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh |
| index f2e58b4604..7298439947 100755 |
| --- a/t/t0060-path-utils.sh |
| +++ b/t/t0060-path-utils.sh |
| @@ -406,6 +406,9 @@ test_expect_success 'match .gitmodules' ' |
| ~1000000 \ |
| ~9999999 \ |
| \ |
| + .gitmodules:\$DATA \ |
| + "gitmod~4 . :\$DATA" \ |
| + \ |
| --not \ |
| ".gitmodules x" \ |
| ".gitmodules .x" \ |
| @@ -430,7 +433,9 @@ test_expect_success 'match .gitmodules' ' |
| \ |
| GI7EB~1 \ |
| GI7EB~01 \ |
| - GI7EB~1X |
| + GI7EB~1X \ |
| + \ |
| + .gitmodules,:\$DATA |
| ' |
| |
| test_done |
| -- |
| 2.24.0.393.g34dc348eaf |
| |