Skip to content

Commit 240258a

Browse files
authored
Avoiding directory execution on hook (#10954) (#10955)
* test -x is not enough https://stackoverflow.com/a/39489087
1 parent 2a06d3a commit 240258a

File tree

7 files changed

+9
-9
lines changed

7 files changed

+9
-9
lines changed

integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ hookname=$(basename $0)
55
GIT_DIR=${GIT_DIR:-$(dirname $0)}
66

77
for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
8-
test -x "${hook}" || continue
8+
test -x "${hook}" && test -f "${hook}" || continue
99
echo "${data}" | "${hook}"
1010
exitcodes="${exitcodes} $?"
1111
done

integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ hookname=$(basename $0)
55
GIT_DIR=${GIT_DIR:-$(dirname $0)}
66

77
for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
8-
test -x "${hook}" || continue
8+
test -x "${hook}" && test -f "${hook}" || continue
99
echo "${data}" | "${hook}"
1010
exitcodes="${exitcodes} $?"
1111
done

integrations/gitea-repositories-meta/user2/repo20.git/hooks/update

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ hookname=$(basename $0)
44
GIT_DIR=${GIT_DIR:-$(dirname $0)}
55

66
for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
7-
test -x "${hook}" || continue
7+
test -x "${hook}" && test -f "${hook}" || continue
88
"${hook}" $1 $2 $3
99
exitcodes="${exitcodes} $?"
1010
done

integrations/gitea-repositories-meta/user27/template1.git/hooks/post-receive

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ hookname=$(basename $0)
55
GIT_DIR=${GIT_DIR:-$(dirname $0)}
66

77
for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
8-
test -x "${hook}" || continue
8+
test -x "${hook}" && test -f "${hook}" || continue
99
echo "${data}" | "${hook}"
1010
exitcodes="${exitcodes} $?"
1111
done

integrations/gitea-repositories-meta/user27/template1.git/hooks/pre-receive

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ hookname=$(basename $0)
55
GIT_DIR=${GIT_DIR:-$(dirname $0)}
66

77
for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
8-
test -x "${hook}" || continue
8+
test -x "${hook}" && test -f "${hook}" || continue
99
echo "${data}" | "${hook}"
1010
exitcodes="${exitcodes} $?"
1111
done

integrations/gitea-repositories-meta/user27/template1.git/hooks/update

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ hookname=$(basename $0)
44
GIT_DIR=${GIT_DIR:-$(dirname $0)}
55

66
for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
7-
test -x "${hook}" || continue
7+
test -x "${hook}" && test -f "${hook}" || continue
88
"${hook}" $1 $2 $3
99
exitcodes="${exitcodes} $?"
1010
done

modules/repository/hooks.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ func createDelegateHooks(repoPath string) (err error) {
2929
var (
3030
hookNames = []string{"pre-receive", "update", "post-receive"}
3131
hookTpls = []string{
32-
fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType),
33-
fmt.Sprintf("#!/usr/bin/env %s\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\n\"${hook}\" $1 $2 $3\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType),
34-
fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType),
32+
fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" && test -f \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType),
33+
fmt.Sprintf("#!/usr/bin/env %s\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" && test -f \"${hook}\" || continue\n\"${hook}\" $1 $2 $3\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType),
34+
fmt.Sprintf("#!/usr/bin/env %s\ndata=$(cat)\nexitcodes=\"\"\nhookname=$(basename $0)\nGIT_DIR=${GIT_DIR:-$(dirname $0)}\n\nfor hook in ${GIT_DIR}/hooks/${hookname}.d/*; do\ntest -x \"${hook}\" && test -f \"${hook}\" || continue\necho \"${data}\" | \"${hook}\"\nexitcodes=\"${exitcodes} $?\"\ndone\n\nfor i in ${exitcodes}; do\n[ ${i} -eq 0 ] || exit ${i}\ndone\n", setting.ScriptType),
3535
}
3636
giteaHookTpls = []string{
3737
fmt.Sprintf("#!/usr/bin/env %s\n\"%s\" hook --config='%s' pre-receive\n", setting.ScriptType, setting.AppPath, setting.CustomConf),

0 commit comments

Comments
 (0)