diff options
author | Frank Lichtenheld <flichtenheld@astaro.com> | 2009-04-18 16:14:02 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-04-18 13:06:40 -0700 |
commit | 32d1776b1341c17b99da862e80ddf151a5b558fe (patch) | |
tree | 6917dd74528fbc8397edf2a3f9786504bab3430e | |
parent | e0b3cc0dffbc965ffa33155cbdcf8d44716c134c (diff) | |
download | git-32d1776b1341c17b99da862e80ddf151a5b558fe.tar.gz git-32d1776b1341c17b99da862e80ddf151a5b558fe.tar.xz |
init: Do not segfault on big GIT_TEMPLATE_DIR environment variable
Signed-off-by: Frank Lichtenheld <flichtenheld@astaro.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-init-db.c | 4 | ||||
-rwxr-xr-x | t/t0001-init.sh | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/builtin-init-db.c b/builtin-init-db.c index d30c3fe2c..6cc945d50 100644 --- a/builtin-init-db.c +++ b/builtin-init-db.c @@ -122,8 +122,10 @@ static void copy_templates(const char *template_dir) template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR); if (!template_dir[0]) return; + template_len = strlen(template_dir); + if (PATH_MAX <= (template_len+strlen("/config"))) + die("insanely long template path %s", template_dir); strcpy(template_path, template_dir); - template_len = strlen(template_path); if (template_path[template_len-1] != '/') { template_path[template_len++] = '/'; template_path[template_len] = 0; diff --git a/t/t0001-init.sh b/t/t0001-init.sh index 5ac0a273a..e3d846420 100755 --- a/t/t0001-init.sh +++ b/t/t0001-init.sh @@ -199,4 +199,13 @@ test_expect_success 'init honors global core.sharedRepository' ' x`git config -f shared-honor-global/.git/config core.sharedRepository` ' +test_expect_success 'init rejects insanely long --template' ' + ( + insane=$(printf "x%09999dx" 1) && + mkdir test && + cd test && + test_must_fail git init --template=$insane + ) +' + test_done |