git.c: make sure we do not leak GIT_* to alias scripts
commit57ea7123c86771f47f34e7d92d1822d8b429897a
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Sun, 20 Dec 2015 07:50:19 +0000 (20 14:50 +0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 Dec 2015 21:40:32 +0000 (22 13:40 -0800)
tree1e9769ae51c20a2136de3f9656f926079254df2e
parent86d26f240fcb4f287258ad459efc2b5e30e60cfd
git.c: make sure we do not leak GIT_* to alias scripts

The unfortunate commit d95138e (setup: set env $GIT_WORK_TREE when
work tree is set, like $GIT_DIR - 2015-06-26) exposes another problem,
besides git-clone that's described in the previous commit. If
GIT_WORK_TREE (or even GIT_DIR) is exported to an alias script, it may
mislead git commands in the script where the repo is. Granted, most
scripts work on the repo where the alias is summoned from. But nowhere
do we forbid the script to visit another repository.

The revert of d95138e in the previous commit is sufficient as a
fix. However, to protect us from accidentally leaking GIT_*
environment variables again, we restore certain sensitive env before
calling the external script.

GIT_PREFIX is let through because there's another setup side effect
that we simply accepted so far: current working directory is
moved. Maybe in future we can introduce a new alias format that
guarantees no cwd move, then we can unexport GIT_PREFIX.

Reported-by: Gabriel Ganne <gabriel.ganne@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git.c
t/t0001-init.sh