path: also guard .gitmodules against NTFS Alternate Data Streams

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>
This commit is contained in:
Johannes Schindelin
2019-08-28 12:22:17 +02:00
parent 7c3745fc61
commit 91bd46588e
2 changed files with 7 additions and 2 deletions

2
path.c
View File

@@ -1369,7 +1369,7 @@ static int is_ntfs_dot_generic(const char *name,
only_spaces_and_periods: only_spaces_and_periods:
for (;;) { for (;;) {
char c = name[i++]; char c = name[i++];
if (!c) if (!c || c == ':')
return 1; return 1;
if (c != ' ' && c != '.') if (c != ' ' && c != '.')
return 0; return 0;

View File

@@ -408,6 +408,9 @@ test_expect_success 'match .gitmodules' '
~1000000 \ ~1000000 \
~9999999 \ ~9999999 \
\ \
.gitmodules:\$DATA \
"gitmod~4 . :\$DATA" \
\
--not \ --not \
".gitmodules x" \ ".gitmodules x" \
".gitmodules .x" \ ".gitmodules .x" \
@@ -432,7 +435,9 @@ test_expect_success 'match .gitmodules' '
\ \
GI7EB~1 \ GI7EB~1 \
GI7EB~01 \ GI7EB~01 \
GI7EB~1X GI7EB~1X \
\
.gitmodules,:\$DATA
' '
test_done test_done