https://github.com/git/git
Revision f6adec4e329ef0e25e14c63b735a5956dc67b8bc authored by Jeff King on 24 September 2018, 08:36:30 UTC, committed by Junio C Hamano on 27 September 2018, 16:34:58 UTC
The previous commit taught the submodule code to invoke our
"git clone $url $path" with a "--" separator so that we
aren't confused by urls or paths that start with dashes.

However, that's just one code path. It's not clear if there
are others, and it would be an easy mistake to add one in
the future. Moreover, even with the fix in the previous
commit, it's quite hard to actually do anything useful with
such an entry. Any url starting with a dash must fall into
one of three categories:

 - it's meant as a file url, like "-path". But then any
   clone is not going to have the matching path, since it's
   by definition relative inside the newly created clone. If
   you spell it as "./-path", the submodule code sees the
   "/" and translates this to an absolute path, so it at
   least works (assuming the receiver has the same
   filesystem layout as you). But that trick does not apply
   for a bare "-path".

 - it's meant as an ssh url, like "-host:path". But this
   already doesn't work, as we explicitly disallow ssh
   hostnames that begin with a dash (to avoid option
   injection against ssh).

 - it's a remote-helper scheme, like "-scheme::data". This
   _could_ work if the receiver bends over backwards and
   creates a funny-named helper like "git-remote--scheme".
   But normally there would not be any helper that matches.

Since such a url does not work today and is not likely to do
anything useful in the future, let's simply disallow them
entirely. That protects the existing "git clone" path (in a
belt-and-suspenders way), along with any others that might
exist.

Our tests cover two cases:

  1. A file url with "./" continues to work, showing that
     there's an escape hatch for people with truly silly
     repo names.

  2. A url starting with "-" is rejected.

Note that we expect case (2) to fail, but it would have done
so even without this commit, for the reasons given above.
So instead of just expecting failure, let's also check for
the magic word "ignoring" on stderr. That lets us know that
we failed for the right reason.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 98afac7
History
Tip revision: f6adec4e329ef0e25e14c63b735a5956dc67b8bc authored by Jeff King on 24 September 2018, 08:36:30 UTC
submodule-config: ban submodule urls that start with dash
Tip revision: f6adec4
File Mode Size
.github
Documentation
block-sha1
builtin
ci
compat
contrib
ewah
git-gui
gitk-git
gitweb
mergetools
perl
po
ppc
refs
sha1collisiondetection @ 19d97bf
sha1dc
t
templates
vcs-svn
xdiff
.gitattributes -rw-r--r-- 249 bytes
.gitignore -rw-r--r-- 3.1 KB
.gitmodules -rw-r--r-- 153 bytes
.mailmap -rw-r--r-- 14.5 KB
.travis.yml -rw-r--r-- 2.0 KB
.tsan-suppressions -rw-r--r-- 411 bytes
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 752 bytes
INSTALL -rw-r--r-- 8.9 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 82.4 KB
README.md -rw-r--r-- 2.9 KB
RelNotes l--------- 33 bytes
abspath.c -rw-r--r-- 6.7 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 4.1 KB
advice.h -rw-r--r-- 1004 bytes
alias.c -rw-r--r-- 1.8 KB
alloc.c -rw-r--r-- 2.6 KB
apply.c -rw-r--r-- 129.3 KB
apply.h -rw-r--r-- 3.9 KB
archive-tar.c -rw-r--r-- 12.4 KB
archive-zip.c -rw-r--r-- 17.0 KB
archive.c -rw-r--r-- 14.7 KB
archive.h -rw-r--r-- 1.3 KB
argv-array.c -rw-r--r-- 1.7 KB
argv-array.h -rw-r--r-- 689 bytes
attr.c -rw-r--r-- 28.3 KB
attr.h -rw-r--r-- 2.2 KB
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 25.1 KB
bisect.h -rw-r--r-- 713 bytes
blame.c -rw-r--r-- 49.6 KB
blame.h -rw-r--r-- 5.2 KB
blob.c -rw-r--r-- 401 bytes
blob.h -rw-r--r-- 666 bytes
branch.c -rw-r--r-- 9.3 KB
branch.h -rw-r--r-- 2.5 KB
builtin.h -rw-r--r-- 12.1 KB
bulk-checkin.c -rw-r--r-- 7.0 KB
bulk-checkin.h -rw-r--r-- 323 bytes
bundle.c -rw-r--r-- 12.3 KB
bundle.h -rw-r--r-- 725 bytes
cache-tree.c -rw-r--r-- 17.4 KB
cache-tree.h -rw-r--r-- 1.6 KB
cache.h -rw-r--r-- 70.6 KB
check-builtins.sh -rwxr-xr-x 596 bytes
check-racy.c -rw-r--r-- 523 bytes
check_bindir -rwxr-xr-x 374 bytes
color.c -rw-r--r-- 8.8 KB
color.h -rw-r--r-- 3.2 KB
column.c -rw-r--r-- 9.7 KB
column.h -rw-r--r-- 1.4 KB
combine-diff.c -rw-r--r-- 40.2 KB
command-list.txt -rw-r--r-- 8.8 KB
commit-slab.h -rw-r--r-- 4.7 KB
commit.c -rw-r--r-- 40.7 KB
commit.h -rw-r--r-- 13.3 KB
common-main.c -rw-r--r-- 1.1 KB
config.c -rw-r--r-- 69.1 KB
config.h -rw-r--r-- 8.9 KB
config.mak.in -rw-r--r-- 540 bytes
config.mak.uname -rw-r--r-- 16.5 KB
configure.ac -rw-r--r-- 36.7 KB
connect.c -rw-r--r-- 22.1 KB
connect.h -rw-r--r-- 676 bytes
connected.c -rw-r--r-- 3.0 KB
connected.h -rw-r--r-- 1.5 KB
convert.c -rw-r--r-- 39.7 KB
convert.h -rw-r--r-- 3.6 KB
copy.c -rw-r--r-- 1.3 KB
credential-cache--daemon.c -rw-r--r-- 6.9 KB
credential-cache.c -rw-r--r-- 3.2 KB
credential-store.c -rw-r--r-- 5.0 KB
credential.c -rw-r--r-- 7.8 KB
credential.h -rw-r--r-- 833 bytes
csum-file.c -rw-r--r-- 4.0 KB
csum-file.h -rw-r--r-- 1.3 KB
ctype.c -rw-r--r-- 2.6 KB
daemon.c -rw-r--r-- 32.0 KB
date.c -rw-r--r-- 27.8 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 400 bytes
delta.h -rw-r--r-- 3.4 KB
diff-delta.c -rw-r--r-- 15.4 KB
diff-lib.c -rw-r--r-- 14.6 KB
diff-no-index.c -rw-r--r-- 6.8 KB
diff.c -rw-r--r-- 142.9 KB
diff.h -rw-r--r-- 13.2 KB
diffcore-break.c -rw-r--r-- 9.0 KB
diffcore-delta.c -rw-r--r-- 5.3 KB
diffcore-order.c -rw-r--r-- 2.4 KB
diffcore-pickaxe.c -rw-r--r-- 6.1 KB
diffcore-rename.c -rw-r--r-- 17.6 KB
diffcore.h -rw-r--r-- 4.8 KB
dir-iterator.c -rw-r--r-- 4.8 KB
dir-iterator.h -rw-r--r-- 2.7 KB
dir.c -rw-r--r-- 75.2 KB
dir.h -rw-r--r-- 11.1 KB
editor.c -rw-r--r-- 1.5 KB
entry.c -rw-r--r-- 11.5 KB
environment.c -rw-r--r-- 8.8 KB
exec_cmd.c -rw-r--r-- 3.2 KB
exec_cmd.h -rw-r--r-- 540 bytes
fast-import.c -rw-r--r-- 89.0 KB
fetch-pack.c -rw-r--r-- 30.4 KB
fetch-pack.h -rw-r--r-- 1.3 KB
fmt-merge-msg.h -rw-r--r-- 187 bytes
fsck.c -rw-r--r-- 24.2 KB
fsck.h -rw-r--r-- 1.8 KB
generate-cmdlist.sh -rwxr-xr-x 929 bytes
gettext.c -rw-r--r-- 5.1 KB
gettext.h -rw-r--r-- 2.2 KB
git-add--interactive.perl -rwxr-xr-x 40.4 KB
git-archimport.perl -rwxr-xr-x 36.1 KB
git-bisect.sh -rwxr-xr-x 15.6 KB
git-compat-util.h -rw-r--r-- 31.3 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.6 KB
git-cvsimport.perl -rwxr-xr-x 31.3 KB
git-cvsserver.perl -rwxr-xr-x 158.9 KB
git-difftool--helper.sh -rwxr-xr-x 2.2 KB
git-filter-branch.sh -rwxr-xr-x 12.8 KB
git-instaweb.sh -rwxr-xr-x 18.1 KB
git-merge-octopus.sh -rwxr-xr-x 2.4 KB
git-merge-one-file.sh -rwxr-xr-x 3.6 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 8.7 KB
git-mergetool.sh -rwxr-xr-x 10.1 KB
git-p4.py -rwxr-xr-x 141.3 KB
git-parse-remote.sh -rw-r--r-- 2.6 KB
git-quiltimport.sh -rwxr-xr-x 3.5 KB
git-rebase--am.sh -rw-r--r-- 2.5 KB
git-rebase--interactive.sh -rw-r--r-- 34.9 KB
git-rebase--merge.sh -rw-r--r-- 3.8 KB
git-rebase.sh -rwxr-xr-x 15.9 KB
git-remote-testgit.sh -rwxr-xr-x 2.9 KB
git-request-pull.sh -rwxr-xr-x 3.6 KB
git-send-email.perl -rwxr-xr-x 52.6 KB
git-sh-i18n.sh -rw-r--r-- 2.3 KB
git-sh-setup.sh -rw-r--r-- 9.1 KB
git-stash.sh -rwxr-xr-x 15.4 KB
git-submodule.sh -rwxr-xr-x 27.6 KB
git-svn.perl -rwxr-xr-x 62.6 KB
git-web--browse.sh -rwxr-xr-x 4.3 KB
git.c -rw-r--r-- 19.6 KB
git.rc -rw-r--r-- 566 bytes
gpg-interface.c -rw-r--r-- 6.3 KB
gpg-interface.h -rw-r--r-- 1.2 KB
graph.c -rw-r--r-- 36.3 KB
graph.h -rw-r--r-- 4.9 KB
grep.c -rw-r--r-- 49.1 KB
grep.h -rw-r--r-- 5.5 KB
hash.h -rw-r--r-- 389 bytes
hashmap.c -rw-r--r-- 7.0 KB
hashmap.h -rw-r--r-- 13.7 KB
help.c -rw-r--r-- 11.4 KB
help.h -rw-r--r-- 1.1 KB
hex.c -rw-r--r-- 2.7 KB
http-backend.c -rw-r--r-- 16.6 KB
http-fetch.c -rw-r--r-- 2.2 KB
http-push.c -rw-r--r-- 49.6 KB
http-walker.c -rw-r--r-- 14.9 KB
http.c -rw-r--r-- 59.4 KB
http.h -rw-r--r-- 6.5 KB
ident.c -rw-r--r-- 12.5 KB
imap-send.c -rw-r--r-- 35.8 KB
iterator.h -rw-r--r-- 2.1 KB
khash.h -rw-r--r-- 12.6 KB
kwset.c -rw-r--r-- 20.5 KB
kwset.h -rw-r--r-- 2.6 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
line-log.c -rw-r--r-- 30.7 KB
line-log.h -rw-r--r-- 1.8 KB
line-range.c -rw-r--r-- 6.5 KB
line-range.h -rw-r--r-- 1.3 KB
list-objects.c -rw-r--r-- 6.0 KB
list-objects.h -rw-r--r-- 381 bytes
list.h -rw-r--r-- 4.6 KB
ll-merge.c -rw-r--r-- 10.5 KB
ll-merge.h -rw-r--r-- 567 bytes
lockfile.c -rw-r--r-- 5.6 KB
lockfile.h -rw-r--r-- 10.5 KB
log-tree.c -rw-r--r-- 24.8 KB
log-tree.h -rw-r--r-- 1.3 KB
mailinfo.c -rw-r--r-- 26.3 KB
mailinfo.h -rw-r--r-- 991 bytes
mailmap.c -rw-r--r-- 8.9 KB
mailmap.h -rw-r--r-- 271 bytes
match-trees.c -rw-r--r-- 8.1 KB
merge-blobs.c -rw-r--r-- 1.9 KB
merge-blobs.h -rw-r--r-- 194 bytes
merge-recursive.c -rw-r--r-- 61.4 KB
merge-recursive.h -rw-r--r-- 1.6 KB
merge.c -rw-r--r-- 2.5 KB
mergesort.c -rw-r--r-- 1.5 KB
mergesort.h -rw-r--r-- 574 bytes
mru.c -rw-r--r-- 968 bytes
mru.h -rw-r--r-- 1.0 KB
name-hash.c -rw-r--r-- 18.1 KB
notes-cache.c -rw-r--r-- 2.2 KB
notes-cache.h -rw-r--r-- 498 bytes
notes-merge.c -rw-r--r-- 22.5 KB
notes-merge.h -rw-r--r-- 2.8 KB
notes-utils.c -rw-r--r-- 4.9 KB
notes-utils.h -rw-r--r-- 1.4 KB
notes.c -rw-r--r-- 37.1 KB
notes.h -rw-r--r-- 11.8 KB
object.c -rw-r--r-- 9.5 KB
object.h -rw-r--r-- 4.5 KB
oidset.c -rw-r--r-- 1.0 KB
oidset.h -rw-r--r-- 1.2 KB
pack-bitmap-write.c -rw-r--r-- 12.3 KB
pack-bitmap.c -rw-r--r-- 24.9 KB
pack-bitmap.h -rw-r--r-- 1.7 KB
pack-check.c -rw-r--r-- 5.3 KB
pack-objects.c -rw-r--r-- 2.2 KB
pack-objects.h -rw-r--r-- 2.2 KB
pack-revindex.c -rw-r--r-- 5.6 KB
pack-revindex.h -rw-r--r-- 323 bytes
pack-write.c -rw-r--r-- 10.3 KB
pack.h -rw-r--r-- 3.4 KB
pager.c -rw-r--r-- 4.4 KB
parse-options-cb.c -rw-r--r-- 5.2 KB
parse-options.c -rw-r--r-- 17.4 KB
parse-options.h -rw-r--r-- 10.1 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-ids.c -rw-r--r-- 3.1 KB
patch-ids.h -rw-r--r-- 585 bytes
path.c -rw-r--r-- 34.1 KB
path.h -rw-r--r-- 2.9 KB
pathspec.c -rw-r--r-- 16.5 KB
pathspec.h -rw-r--r-- 2.9 KB
pkt-line.c -rw-r--r-- 8.5 KB
pkt-line.h -rw-r--r-- 4.1 KB
preload-index.c -rw-r--r-- 2.5 KB
pretty.c -rw-r--r-- 44.9 KB
prio-queue.c -rw-r--r-- 1.8 KB
prio-queue.h -rw-r--r-- 1.5 KB
progress.c -rw-r--r-- 6.3 KB
progress.h -rw-r--r-- 504 bytes
prompt.c -rw-r--r-- 1.4 KB
prompt.h -rw-r--r-- 168 bytes
quote.c -rw-r--r-- 10.6 KB
quote.h -rw-r--r-- 2.8 KB
reachable.c -rw-r--r-- 4.8 KB
reachable.h -rw-r--r-- 300 bytes
read-cache.c -rw-r--r-- 70.5 KB
ref-filter.c -rw-r--r-- 59.3 KB
ref-filter.h -rw-r--r-- 4.2 KB
reflog-walk.c -rw-r--r-- 8.2 KB
reflog-walk.h -rw-r--r-- 918 bytes
refs.c -rw-r--r-- 50.3 KB
refs.h -rw-r--r-- 28.1 KB
remote-curl.c -rw-r--r-- 27.3 KB
remote-testsvn.c -rw-r--r-- 8.2 KB
remote.c -rw-r--r-- 58.5 KB
remote.h -rw-r--r-- 8.2 KB
replace_object.c -rw-r--r-- 3.0 KB
repository.c -rw-r--r-- 5.7 KB
repository.h -rw-r--r-- 2.6 KB
rerere.c -rw-r--r-- 31.0 KB
rerere.h -rw-r--r-- 1.2 KB
resolve-undo.c -rw-r--r-- 4.3 KB
resolve-undo.h -rw-r--r-- 612 bytes
revision.c -rw-r--r-- 93.0 KB
revision.h -rw-r--r-- 8.0 KB
run-command.c -rw-r--r-- 36.6 KB
run-command.h -rw-r--r-- 7.6 KB
send-pack.c -rw-r--r-- 15.5 KB
send-pack.h -rw-r--r-- 840 bytes
sequencer.c -rw-r--r-- 67.2 KB
sequencer.h -rw-r--r-- 1.0 KB
server-info.c -rw-r--r-- 5.7 KB
setup.c -rw-r--r-- 32.8 KB
sh-i18n--envsubst.c -rw-r--r-- 10.3 KB
sha1-array.c -rw-r--r-- 1.2 KB
sha1-array.h -rw-r--r-- 585 bytes
sha1-lookup.c -rw-r--r-- 2.6 KB
sha1-lookup.h -rw-r--r-- 234 bytes
sha1_file.c -rw-r--r-- 99.5 KB
sha1_name.c -rw-r--r-- 40.0 KB
sha1dc_git.c -rw-r--r-- 609 bytes
sha1dc_git.h -rw-r--r-- 579 bytes
shallow.c -rw-r--r-- 19.4 KB
shell.c -rw-r--r-- 4.5 KB
shortlog.h -rw-r--r-- 492 bytes
show-index.c -rw-r--r-- 2.2 KB
sideband.c -rw-r--r-- 3.1 KB
sideband.h -rw-r--r-- 259 bytes
sigchain.c -rw-r--r-- 1.1 KB
sigchain.h -rw-r--r-- 247 bytes
split-index.c -rw-r--r-- 9.5 KB
split-index.h -rw-r--r-- 1.2 KB
strbuf.c -rw-r--r-- 19.7 KB
strbuf.h -rw-r--r-- 21.0 KB
streaming.c -rw-r--r-- 11.8 KB
streaming.h -rw-r--r-- 507 bytes
string-list.c -rw-r--r-- 7.5 KB
string-list.h -rw-r--r-- 5.4 KB
sub-process.c -rw-r--r-- 5.3 KB
sub-process.h -rw-r--r-- 3.2 KB
submodule-config.c -rw-r--r-- 16.4 KB
submodule-config.h -rw-r--r-- 2.0 KB
submodule.c -rw-r--r-- 55.3 KB
submodule.h -rw-r--r-- 5.7 KB
symlinks.c -rw-r--r-- 9.3 KB
tag.c -rw-r--r-- 4.5 KB
tag.h -rw-r--r-- 608 bytes
tar.h -rw-r--r-- 644 bytes
tempfile.c -rw-r--r-- 8.2 KB
tempfile.h -rw-r--r-- 9.5 KB
thread-utils.c -rw-r--r-- 1.7 KB
thread-utils.h -rw-r--r-- 241 bytes
tmp-objdir.c -rw-r--r-- 6.4 KB
tmp-objdir.h -rw-r--r-- 1.5 KB
trace.c -rw-r--r-- 10.8 KB
trace.h -rw-r--r-- 3.6 KB
trailer.c -rw-r--r-- 25.9 KB
trailer.h -rw-r--r-- 737 bytes
transport-helper.c -rw-r--r-- 36.1 KB
transport.c -rw-r--r-- 33.2 KB
transport.h -rw-r--r-- 8.4 KB
tree-diff.c -rw-r--r-- 18.0 KB
tree-walk.c -rw-r--r-- 28.9 KB
tree-walk.h -rw-r--r-- 3.1 KB
tree.c -rw-r--r-- 6.4 KB
tree.h -rw-r--r-- 1.1 KB
unicode_width.h -rw-r--r-- 8.5 KB
unimplemented.sh -rw-r--r-- 101 bytes
unix-socket.c -rw-r--r-- 2.4 KB
unix-socket.h -rw-r--r-- 158 bytes
unpack-trees.c -rw-r--r-- 56.4 KB
unpack-trees.h -rw-r--r-- 2.3 KB
upload-pack.c -rw-r--r-- 27.0 KB
url.c -rw-r--r-- 2.4 KB
url.h -rw-r--r-- 492 bytes
urlmatch.c -rw-r--r-- 18.1 KB
urlmatch.h -rw-r--r-- 2.0 KB
usage.c -rw-r--r-- 4.9 KB
userdiff.c -rw-r--r-- 9.6 KB
userdiff.h -rw-r--r-- 780 bytes
utf8.c -rw-r--r-- 16.8 KB
utf8.h -rw-r--r-- 2.4 KB
varint.c -rw-r--r-- 660 bytes
varint.h -rw-r--r-- 168 bytes
version.c -rw-r--r-- 651 bytes
version.h -rw-r--r-- 180 bytes
versioncmp.c -rw-r--r-- 5.2 KB
walker.c -rw-r--r-- 7.3 KB
walker.h -rw-r--r-- 1.1 KB
wildmatch.c -rw-r--r-- 7.8 KB
wildmatch.h -rw-r--r-- 293 bytes
worktree.c -rw-r--r-- 8.7 KB
worktree.h -rw-r--r-- 2.4 KB
wrap-for-bin.sh -rw-r--r-- 819 bytes
wrapper.c -rw-r--r-- 14.7 KB
write_or_die.c -rw-r--r-- 1.5 KB
ws.c -rw-r--r-- 9.4 KB
wt-status.c -rw-r--r-- 63.2 KB
wt-status.h -rw-r--r-- 3.5 KB
xdiff-interface.c -rw-r--r-- 7.0 KB
xdiff-interface.h -rw-r--r-- 1.2 KB
zlib.c -rw-r--r-- 6.1 KB

README.md

back to top