From 4dc0a99919abf6fdc86232cd870708dcfe1f5e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B4=8A=E1=B4=8F=E1=B4=87=20=E1=B4=84=CA=9C=E1=B4=87?= =?UTF-8?q?=C9=B4?= Date: Fri, 23 Jan 2026 09:40:36 -0500 Subject: [PATCH] repo: validate Git server hook name for editing (#8103) --- internal/route/repo/setting.go | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/internal/route/repo/setting.go b/internal/route/repo/setting.go index b1d4de6a8..9afcdd971 100644 --- a/internal/route/repo/setting.go +++ b/internal/route/repo/setting.go @@ -582,13 +582,27 @@ func SettingsGitHooks(c *context.Context) { c.Success(SETTINGS_GITHOOKS) } +func isValidHookName(name git.HookName) bool { + for _, h := range git.ServerSideHooks { + if h == name { + return true + } + } + return false +} + func SettingsGitHooksEdit(c *context.Context) { c.Data["Title"] = c.Tr("repo.settings.githooks") c.Data["PageIsSettingsGitHooks"] = true c.Data["RequireSimpleMDE"] = true - name := c.Params(":name") - hook, err := c.Repo.GitRepo.Hook("custom_hooks", git.HookName(name)) + name := git.HookName(c.Params(":name")) + if !isValidHookName(name) { + c.NotFound() + return + } + + hook, err := c.Repo.GitRepo.Hook("custom_hooks", name) if err != nil { c.NotFoundOrError(osutil.NewError(err), "get hook") return @@ -598,8 +612,13 @@ func SettingsGitHooksEdit(c *context.Context) { } func SettingsGitHooksEditPost(c *context.Context) { - name := c.Params(":name") - hook, err := c.Repo.GitRepo.Hook("custom_hooks", git.HookName(name)) + name := git.HookName(c.Params(":name")) + if !isValidHookName(name) { + c.NotFound() + return + } + + hook, err := c.Repo.GitRepo.Hook("custom_hooks", name) if err != nil { c.NotFoundOrError(osutil.NewError(err), "get hook") return