From d663cef2a578f0ec4ed034299d814558838a1172 Mon Sep 17 00:00:00 2001 From: Deyong Zhu <05zhujiahua@gmail.com> Date: Mon, 8 Jan 2018 23:17:24 +0800 Subject: [PATCH] Fix branch name escaping in compare url (#3311) * Fixes #3303 --- routers/repo/pull.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 515b6a91f8..35b5b0be2b 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -10,6 +10,7 @@ import ( "container/list" "fmt" "io" + "net/url" "path" "strings" @@ -569,7 +570,19 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, * // format: ...[:] // base<-head: master...head:feature // same repo: master...feature - infos := strings.Split(ctx.Params("*"), "...") + + var ( + headUser *models.User + headBranch string + isSameRepo bool + infoPath string + err error + ) + infoPath, err = url.QueryUnescape(ctx.Params("*")) + if err != nil { + ctx.Handle(404, "QueryUnescape", err) + } + infos := strings.Split(infoPath, "...") if len(infos) != 2 { log.Trace("ParseCompareInfo[%d]: not enough compared branches information %s", baseRepo.ID, infos) ctx.Handle(404, "CompareAndPullRequest", nil) @@ -579,13 +592,6 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, * baseBranch := infos[0] ctx.Data["BaseBranch"] = baseBranch - var ( - headUser *models.User - headBranch string - isSameRepo bool - err error - ) - // If there is no head repository, it means pull request between same repository. headInfos := strings.Split(infos[1], ":") if len(headInfos) == 1 {