aboutsummaryrefslogtreecommitdiffstats
path: root/routers/repo
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo')
-rw-r--r--routers/repo/compare.go10
-rw-r--r--routers/repo/issue.go55
-rw-r--r--routers/repo/lfs.go13
-rw-r--r--routers/repo/milestone.go19
-rw-r--r--routers/repo/projects.go19
-rw-r--r--routers/repo/release.go19
-rw-r--r--routers/repo/view.go51
-rw-r--r--routers/repo/wiki.go31
8 files changed, 169 insertions, 48 deletions
diff --git a/routers/repo/compare.go b/routers/repo/compare.go
index 7046f3ecdb..a658374d9b 100644
--- a/routers/repo/compare.go
+++ b/routers/repo/compare.go
@@ -10,7 +10,6 @@ import (
"errors"
"fmt"
"html"
- "io/ioutil"
"net/http"
"path"
"path/filepath"
@@ -117,14 +116,7 @@ func setCsvCompareContext(ctx *context.Context) {
}
defer reader.Close()
- b, err := ioutil.ReadAll(reader)
- if err != nil {
- return nil, err
- }
-
- b = charset.ToUTF8WithFallback(b)
-
- return csv_module.CreateReaderAndGuessDelimiter(b), nil
+ return csv_module.CreateReaderAndGuessDelimiter(charset.ToUTF8WithFallbackReader(reader))
}
baseReader, err := csvReaderFromCommit(baseCommit)
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 7471bb65a4..12726cd22c 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -1131,8 +1131,14 @@ func ViewIssue(ctx *context.Context) {
}
ctx.Data["IssueWatch"] = iw
- issue.RenderedContent = string(markdown.Render([]byte(issue.Content), ctx.Repo.RepoLink,
- ctx.Repo.Repository.ComposeMetas()))
+ issue.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, issue.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
repo := ctx.Repo.Repository
@@ -1289,9 +1295,14 @@ func ViewIssue(ctx *context.Context) {
return
}
- comment.RenderedContent = string(markdown.Render([]byte(comment.Content), ctx.Repo.RepoLink,
- ctx.Repo.Repository.ComposeMetas()))
-
+ comment.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, comment.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
// Check tag.
tag, ok = marked[comment.PosterID]
if ok {
@@ -1359,8 +1370,14 @@ func ViewIssue(ctx *context.Context) {
}
}
} else if comment.Type == models.CommentTypeCode || comment.Type == models.CommentTypeReview || comment.Type == models.CommentTypeDismissReview {
- comment.RenderedContent = string(markdown.Render([]byte(comment.Content), ctx.Repo.RepoLink,
- ctx.Repo.Repository.ComposeMetas()))
+ comment.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, comment.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
if err = comment.LoadReview(); err != nil && !models.IsErrReviewNotExist(err) {
ctx.ServerError("LoadReview", err)
return
@@ -1708,10 +1725,20 @@ func UpdateIssueContent(ctx *context.Context) {
files := ctx.QueryStrings("files[]")
if err := updateAttachments(issue, files); err != nil {
ctx.ServerError("UpdateAttachments", err)
+ return
+ }
+
+ content, err := markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Query("context"),
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, issue.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
}
ctx.JSON(http.StatusOK, map[string]interface{}{
- "content": string(markdown.Render([]byte(issue.Content), ctx.Query("context"), ctx.Repo.Repository.ComposeMetas())),
+ "content": content,
"attachments": attachmentsHTML(ctx, issue.Attachments, issue.Content),
})
}
@@ -2125,10 +2152,20 @@ func UpdateCommentContent(ctx *context.Context) {
files := ctx.QueryStrings("files[]")
if err := updateAttachments(comment, files); err != nil {
ctx.ServerError("UpdateAttachments", err)
+ return
+ }
+
+ content, err := markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Query("context"),
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, comment.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
}
ctx.JSON(http.StatusOK, map[string]interface{}{
- "content": string(markdown.Render([]byte(comment.Content), ctx.Query("context"), ctx.Repo.Repository.ComposeMetas())),
+ "content": content,
"attachments": attachmentsHTML(ctx, comment.Attachments, comment.Content),
})
}
diff --git a/routers/repo/lfs.go b/routers/repo/lfs.go
index 457ffb6aba..3a7ce2e23b 100644
--- a/routers/repo/lfs.go
+++ b/routers/repo/lfs.go
@@ -296,20 +296,13 @@ func LFSFileGet(ctx *context.Context) {
break
}
- d, _ := ioutil.ReadAll(dataRc)
- buf = charset.ToUTF8WithFallback(append(buf, d...))
+ buf := charset.ToUTF8WithFallbackReader(io.MultiReader(bytes.NewReader(buf), dataRc))
// Building code view blocks with line number on server side.
- var fileContent string
- if content, err := charset.ToUTF8WithErr(buf); err != nil {
- log.Error("ToUTF8WithErr: %v", err)
- fileContent = string(buf)
- } else {
- fileContent = content
- }
+ fileContent, _ := ioutil.ReadAll(buf)
var output bytes.Buffer
- lines := strings.Split(fileContent, "\n")
+ lines := strings.Split(string(fileContent), "\n")
//Remove blank line at the end of file
if len(lines) > 0 && lines[len(lines)-1] == "" {
lines = lines[:len(lines)-1]
diff --git a/routers/repo/milestone.go b/routers/repo/milestone.go
index 5a9d2351bc..bb6b310cbe 100644
--- a/routers/repo/milestone.go
+++ b/routers/repo/milestone.go
@@ -12,6 +12,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
@@ -84,7 +85,14 @@ func Milestones(ctx *context.Context) {
}
}
for _, m := range miles {
- m.RenderedContent = string(markdown.Render([]byte(m.Content), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
+ m.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, m.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
}
ctx.Data["Milestones"] = miles
@@ -269,7 +277,14 @@ func MilestoneIssuesAndPulls(ctx *context.Context) {
return
}
- milestone.RenderedContent = string(markdown.Render([]byte(milestone.Content), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
+ milestone.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, milestone.Content)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
ctx.Data["Title"] = milestone.Name
ctx.Data["Milestone"] = milestone
diff --git a/routers/repo/projects.go b/routers/repo/projects.go
index 96ef2c6c0c..eb0719995c 100644
--- a/routers/repo/projects.go
+++ b/routers/repo/projects.go
@@ -12,6 +12,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@@ -77,7 +78,14 @@ func Projects(ctx *context.Context) {
}
for i := range projects {
- projects[i].RenderedContent = string(markdown.Render([]byte(projects[i].Description), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
+ projects[i].RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, projects[i].Description)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
}
ctx.Data["Projects"] = projects
@@ -311,7 +319,14 @@ func ViewProject(ctx *context.Context) {
}
ctx.Data["LinkedPRs"] = linkedPrsMap
- project.RenderedContent = string(markdown.Render([]byte(project.Description), ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()))
+ project.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, project.Description)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
ctx.Data["Project"] = project
diff --git a/routers/repo/release.go b/routers/repo/release.go
index 2ebb69b6ab..abce3e9ac1 100644
--- a/routers/repo/release.go
+++ b/routers/repo/release.go
@@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/convert"
"code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/upload"
@@ -132,7 +133,14 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
ctx.ServerError("calReleaseNumCommitsBehind", err)
return
}
- r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())
+ r.Note, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, r.Note)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
}
ctx.Data["Releases"] = releases
@@ -182,7 +190,14 @@ func SingleRelease(ctx *context.Context) {
ctx.ServerError("calReleaseNumCommitsBehind", err)
return
}
- release.Note = markdown.RenderString(release.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())
+ release.Note, err = markdown.RenderString(&markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeMetas(),
+ }, release.Note)
+ if err != nil {
+ ctx.ServerError("RenderString", err)
+ return
+ }
ctx.Data["Releases"] = []*models.Release{release}
ctx.HTML(http.StatusOK, tplReleases)
diff --git a/routers/repo/view.go b/routers/repo/view.go
index a03fd58c8a..10deb7065a 100644
--- a/routers/repo/view.go
+++ b/routers/repo/view.go
@@ -324,13 +324,26 @@ func renderDirectory(ctx *context.Context, treeLink string) {
ctx.Data["IsTextFile"] = true
ctx.Data["FileSize"] = fileSize
} else {
- d, _ := ioutil.ReadAll(dataRc)
- buf = charset.ToUTF8WithFallback(append(buf, d...))
+ rd := charset.ToUTF8WithFallbackReader(io.MultiReader(bytes.NewReader(buf), dataRc))
if markupType := markup.Type(readmeFile.name); markupType != "" {
ctx.Data["IsMarkup"] = true
ctx.Data["MarkupType"] = string(markupType)
- ctx.Data["FileContent"] = string(markup.Render(readmeFile.name, buf, readmeTreelink, ctx.Repo.Repository.ComposeDocumentMetas()))
+ var result strings.Builder
+ err := markup.Render(&markup.RenderContext{
+ Filename: readmeFile.name,
+ URLPrefix: readmeTreelink,
+ Metas: ctx.Repo.Repository.ComposeDocumentMetas(),
+ }, rd, &result)
+ if err != nil {
+ log.Error("Render failed: %v then fallback", err)
+ bs, _ := ioutil.ReadAll(rd)
+ ctx.Data["FileContent"] = strings.ReplaceAll(
+ gotemplate.HTMLEscapeString(string(bs)), "\n", `<br>`,
+ )
+ } else {
+ ctx.Data["FileContent"] = result.String()
+ }
} else {
ctx.Data["IsRenderedHTML"] = true
ctx.Data["FileContent"] = strings.ReplaceAll(
@@ -481,21 +494,30 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
break
}
- d, _ := ioutil.ReadAll(dataRc)
- buf = charset.ToUTF8WithFallback(append(buf, d...))
+ rd := charset.ToUTF8WithFallbackReader(io.MultiReader(bytes.NewReader(buf), dataRc))
readmeExist := markup.IsReadmeFile(blob.Name())
ctx.Data["ReadmeExist"] = readmeExist
if markupType := markup.Type(blob.Name()); markupType != "" {
ctx.Data["IsMarkup"] = true
ctx.Data["MarkupType"] = markupType
- ctx.Data["FileContent"] = string(markup.Render(blob.Name(), buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeDocumentMetas()))
+ var result strings.Builder
+ err := markup.Render(&markup.RenderContext{
+ Filename: blob.Name(),
+ URLPrefix: path.Dir(treeLink),
+ Metas: ctx.Repo.Repository.ComposeDocumentMetas(),
+ }, rd, &result)
+ if err != nil {
+ ctx.ServerError("Render", err)
+ return
+ }
+ ctx.Data["FileContent"] = result.String()
} else if readmeExist {
ctx.Data["IsRenderedHTML"] = true
ctx.Data["FileContent"] = strings.ReplaceAll(
gotemplate.HTMLEscapeString(string(buf)), "\n", `<br>`,
)
} else {
- buf = charset.ToUTF8WithFallback(buf)
+ buf, _ := ioutil.ReadAll(rd)
lineNums := linesBytesCount(buf)
ctx.Data["NumLines"] = strconv.Itoa(lineNums)
ctx.Data["NumLinesSet"] = true
@@ -532,11 +554,20 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
}
if markupType := markup.Type(blob.Name()); markupType != "" {
- d, _ := ioutil.ReadAll(dataRc)
- buf = append(buf, d...)
+ rd := io.MultiReader(bytes.NewReader(buf), dataRc)
ctx.Data["IsMarkup"] = true
ctx.Data["MarkupType"] = markupType
- ctx.Data["FileContent"] = string(markup.Render(blob.Name(), buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeDocumentMetas()))
+ var result strings.Builder
+ err := markup.Render(&markup.RenderContext{
+ Filename: blob.Name(),
+ URLPrefix: path.Dir(treeLink),
+ Metas: ctx.Repo.Repository.ComposeDocumentMetas(),
+ }, rd, &result)
+ if err != nil {
+ ctx.ServerError("Render", err)
+ return
+ }
+ ctx.Data["FileContent"] = result.String()
}
}
diff --git a/routers/repo/wiki.go b/routers/repo/wiki.go
index 290e2e8bb2..1bdd06dce5 100644
--- a/routers/repo/wiki.go
+++ b/routers/repo/wiki.go
@@ -6,6 +6,7 @@
package repo
import (
+ "bytes"
"fmt"
"io/ioutil"
"net/http"
@@ -211,12 +212,34 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
return nil, nil
}
- metas := ctx.Repo.Repository.ComposeDocumentMetas()
- ctx.Data["content"] = markdown.RenderWiki(data, ctx.Repo.RepoLink, metas)
+ var rctx = &markup.RenderContext{
+ URLPrefix: ctx.Repo.RepoLink,
+ Metas: ctx.Repo.Repository.ComposeDocumentMetas(),
+ IsWiki: true,
+ }
+
+ var buf strings.Builder
+ if err := markdown.Render(rctx, bytes.NewReader(data), &buf); err != nil {
+ ctx.ServerError("Render", err)
+ return nil, nil
+ }
+ ctx.Data["content"] = buf.String()
+
+ buf.Reset()
+ if err := markdown.Render(rctx, bytes.NewReader(sidebarContent), &buf); err != nil {
+ ctx.ServerError("Render", err)
+ return nil, nil
+ }
ctx.Data["sidebarPresent"] = sidebarContent != nil
- ctx.Data["sidebarContent"] = markdown.RenderWiki(sidebarContent, ctx.Repo.RepoLink, metas)
+ ctx.Data["sidebarContent"] = buf.String()
+
+ buf.Reset()
+ if err := markdown.Render(rctx, bytes.NewReader(footerContent), &buf); err != nil {
+ ctx.ServerError("Render", err)
+ return nil, nil
+ }
ctx.Data["footerPresent"] = footerContent != nil
- ctx.Data["footerContent"] = markdown.RenderWiki(footerContent, ctx.Repo.RepoLink, metas)
+ ctx.Data["footerContent"] = buf.String()
// get commit count - wiki revisions
commitsCount, _ := wikiRepo.FileCommitsCount("master", pageFilename)