Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
forked fromgo-gitea/gitea

Commit7a567a3

Browse files
wxiaoguangGiteaBot
authored andcommitted
Limit reading bytes instead of ReadAll (go-gitea#35928)
1 parent1d9ae7a commit7a567a3

File tree

10 files changed

+64
-30
lines changed

10 files changed

+64
-30
lines changed

‎modules/actions/workflows.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ package actions
55

66
import (
77
"bytes"
8-
"io"
98
"slices"
109
"strings"
1110

1211
"code.gitea.io/gitea/modules/git"
1312
"code.gitea.io/gitea/modules/glob"
1413
"code.gitea.io/gitea/modules/log"
1514
api"code.gitea.io/gitea/modules/structs"
15+
"code.gitea.io/gitea/modules/util"
1616
webhook_module"code.gitea.io/gitea/modules/webhook"
1717

1818
"github.com/nektos/act/pkg/jobparser"
@@ -77,7 +77,7 @@ func GetContentFromEntry(entry *git.TreeEntry) ([]byte, error) {
7777
iferr!=nil {
7878
returnnil,err
7979
}
80-
content,err:=io.ReadAll(f)
80+
content,err:=util.ReadWithLimit(f,1024*1024)
8181
_=f.Close()
8282
iferr!=nil {
8383
returnnil,err

‎modules/issue/template/unmarshal.go‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package template
55

66
import (
77
"fmt"
8-
"io"
98
"path"
109
"strconv"
1110

@@ -76,7 +75,7 @@ func unmarshalFromEntry(entry *git.TreeEntry, filename string) (*api.IssueTempla
7675
}
7776
deferr.Close()
7877

79-
content,err:=io.ReadAll(r)
78+
content,err:=util.ReadWithLimit(r,1024*1024)
8079
iferr!=nil {
8180
returnnil,fmt.Errorf("read all: %w",err)
8281
}

‎modules/packages/nuget/metadata.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func ParseNuspecMetaData(archive *zip.Reader, r io.Reader) (*Package, error) {
216216
ifp.Metadata.Readme!="" {
217217
f,err:=archive.Open(p.Metadata.Readme)
218218
iferr==nil {
219-
buf,_:=io.ReadAll(f)
219+
buf,_:=util.ReadWithLimit(f,1024*1024)
220220
m.Readme=string(buf)
221221
_=f.Close()
222222
}

‎modules/packages/pub/metadata.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func ParsePackage(r io.Reader) (*Package, error) {
8989
returnnil,err
9090
}
9191
}elseifstrings.EqualFold(hd.Name,"readme.md") {
92-
data,err:=io.ReadAll(tr)
92+
data,err:=util.ReadWithLimit(tr,1024*1024)
9393
iferr!=nil {
9494
returnnil,err
9595
}

‎modules/util/io.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func ReadAtMost(r io.Reader, buf []byte) (n int, err error) {
2929
// ReadWithLimit reads at most "limit" bytes from r into buf.
3030
// If EOF or ErrUnexpectedEOF occurs while reading, err will be nil.
3131
funcReadWithLimit(r io.Reader,nint) (buf []byte,errerror) {
32-
returnreadWithLimit(r,1024,n)
32+
returnreadWithLimit(r,4*1024,n)
3333
}
3434

3535
funcreadWithLimit(r io.Reader,batch,limitint) ([]byte,error) {

‎routers/web/repo/wiki.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func wikiContentsByEntry(ctx *context.Context, entry *git.TreeEntry) []byte {
133133
returnnil
134134
}
135135
deferreader.Close()
136-
content,err:=io.ReadAll(reader)
136+
content,err:=util.ReadWithLimit(reader,5*1024*1024)// 5MB should be enough for a wiki page
137137
iferr!=nil {
138138
ctx.ServerError("ReadAll",err)
139139
returnnil

‎services/issue/template.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package issue
55

66
import (
77
"fmt"
8-
"io"
98
"net/url"
109
"path"
1110
"strings"
@@ -15,6 +14,7 @@ import (
1514
"code.gitea.io/gitea/modules/issue/template"
1615
"code.gitea.io/gitea/modules/log"
1716
api"code.gitea.io/gitea/modules/structs"
17+
"code.gitea.io/gitea/modules/util"
1818

1919
"gopkg.in/yaml.v3"
2020
)
@@ -65,7 +65,7 @@ func GetTemplateConfig(gitRepo *git.Repository, path string, commit *git.Commit)
6565

6666
deferreader.Close()
6767

68-
configContent,err:=io.ReadAll(reader)
68+
configContent,err:=util.ReadWithLimit(reader,1024*1024)
6969
iferr!=nil {
7070
returnGetDefaultTemplateConfig(),err
7171
}

‎services/repository/generate.go‎

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import (
77
"bufio"
88
"bytes"
99
"context"
10+
"errors"
1011
"fmt"
12+
"io/fs"
1113
"os"
1214
"path/filepath"
1315
"regexp"
@@ -138,31 +140,37 @@ func (gt *giteaTemplateFileMatcher) Match(s string) bool {
138140
returnfalse
139141
}
140142

141-
funcreadGiteaTemplateFile(tmpDirstring) (*giteaTemplateFileMatcher,error) {
142-
localPath:=filepath.Join(tmpDir,".gitea","template")
143-
if_,err:=os.Stat(localPath);os.IsNotExist(err) {
144-
returnnil,nil
145-
}elseiferr!=nil {
143+
funcreadLocalTmpRepoFileContent(localPathstring,limitint) ([]byte,error) {
144+
ok,err:=util.IsRegularFile(localPath)
145+
iferr!=nil {
146146
returnnil,err
147+
}elseif!ok {
148+
returnnil,fs.ErrNotExist
147149
}
148150

149-
content,err:=os.ReadFile(localPath)
151+
f,err:=os.Open(localPath)
150152
iferr!=nil {
151153
returnnil,err
152154
}
155+
deferf.Close()
156+
157+
returnutil.ReadWithLimit(f,limit)
158+
}
153159

160+
funcreadGiteaTemplateFile(tmpDirstring) (*giteaTemplateFileMatcher,error) {
161+
localPath:=filepath.Join(tmpDir,".gitea","template")
162+
content,err:=readLocalTmpRepoFileContent(localPath,1024*1024)
163+
iferr!=nil {
164+
returnnil,err
165+
}
154166
returnnewGiteaTemplateFileMatcher(localPath,content),nil
155167
}
156168

157169
funcsubstGiteaTemplateFile(ctx context.Context,tmpDir,tmpDirSubPathstring,templateRepo,generateRepo*repo_model.Repository)error {
158170
tmpFullPath:=filepath.Join(tmpDir,tmpDirSubPath)
159-
ifok,err:=util.IsRegularFile(tmpFullPath);!ok {
160-
returnerr
161-
}
162-
163-
content,err:=os.ReadFile(tmpFullPath)
171+
content,err:=readLocalTmpRepoFileContent(tmpFullPath,1024*1024)
164172
iferr!=nil {
165-
returnerr
173+
returnutil.Iif(errors.Is(err,fs.ErrNotExist),nil,err)
166174
}
167175
iferr:=util.Remove(tmpFullPath);err!=nil {
168176
returnerr
@@ -172,7 +180,7 @@ func substGiteaTemplateFile(ctx context.Context, tmpDir, tmpDirSubPath string, t
172180
substSubPath:=filepath.Clean(filePathSanitize(generateExpansion(ctx,tmpDirSubPath,templateRepo,generateRepo)))
173181
newLocalPath:=filepath.Join(tmpDir,substSubPath)
174182
regular,err:=util.IsRegularFile(newLocalPath)
175-
ifcanWrite:=regular||os.IsNotExist(err);!canWrite {
183+
ifcanWrite:=regular||errors.Is(err,fs.ErrNotExist);!canWrite {
176184
returnnil
177185
}
178186
iferr:=os.MkdirAll(filepath.Dir(newLocalPath),0o755);err!=nil {
@@ -242,15 +250,15 @@ func generateRepoCommit(ctx context.Context, repo, templateRepo, generateRepo *r
242250

243251
// Variable expansion
244252
fileMatcher,err:=readGiteaTemplateFile(tmpDir)
245-
iferr!=nil {
246-
returnfmt.Errorf("readGiteaTemplateFile: %w",err)
247-
}
248-
249-
iffileMatcher!=nil {
253+
iferr==nil {
250254
err=processGiteaTemplateFile(ctx,tmpDir,templateRepo,generateRepo,fileMatcher)
251255
iferr!=nil {
252-
returnerr
256+
returnfmt.Errorf("processGiteaTemplateFile: %w",err)
253257
}
258+
}elseiferrors.Is(err,fs.ErrNotExist) {
259+
log.Debug("skip processing repo template files: no available .gitea/template")
260+
}else {
261+
returnfmt.Errorf("readGiteaTemplateFile: %w",err)
254262
}
255263

256264
iferr=git.InitRepository(ctx,tmpDir,false,templateRepo.ObjectFormatName);err!=nil {

‎services/repository/generate_test.go‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package repository
55

66
import (
7+
"io/fs"
78
"os"
89
"path/filepath"
910
"testing"
@@ -175,6 +176,31 @@ func TestProcessGiteaTemplateFile(t *testing.T) {
175176
// subst from a link, skip, and the target is unchanged
176177
assertSymLink("subst-${TEMPLATE_NAME}-from-link",tmpDir+"/sub/link-target")
177178
}
179+
180+
{
181+
templateFilePath:=tmpDir+"/.gitea/template"
182+
183+
_=os.Remove(templateFilePath)
184+
_,err:=os.Lstat(templateFilePath)
185+
require.ErrorIs(t,err,fs.ErrNotExist)
186+
_,err=readGiteaTemplateFile(tmpDir)// no template file
187+
require.ErrorIs(t,err,fs.ErrNotExist)
188+
189+
_=os.WriteFile(templateFilePath+".target", []byte("test-data-target"),0o644)
190+
_=os.Symlink(templateFilePath+".target",templateFilePath)
191+
content,_:=os.ReadFile(templateFilePath)
192+
require.Equal(t,"test-data-target",string(content))
193+
_,err=readGiteaTemplateFile(tmpDir)// symlinked template file
194+
require.ErrorIs(t,err,fs.ErrNotExist)
195+
196+
_=os.Remove(templateFilePath)
197+
_=os.WriteFile(templateFilePath, []byte("test-data-regular"),0o644)
198+
content,_=os.ReadFile(templateFilePath)
199+
require.Equal(t,"test-data-regular",string(content))
200+
fm,err:=readGiteaTemplateFile(tmpDir)// regular template file
201+
require.NoError(t,err)
202+
assert.Len(t,fm.globs,1)
203+
}
178204
}
179205

180206
funcTestTransformers(t*testing.T) {

‎services/webhook/deliver.go‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"code.gitea.io/gitea/modules/queue"
3131
"code.gitea.io/gitea/modules/setting"
3232
"code.gitea.io/gitea/modules/timeutil"
33+
"code.gitea.io/gitea/modules/util"
3334
webhook_module"code.gitea.io/gitea/modules/webhook"
3435
)
3536

@@ -264,7 +265,7 @@ func Deliver(ctx context.Context, t *webhook_model.HookTask) error {
264265
t.ResponseInfo.Headers[k]=strings.Join(vals,",")
265266
}
266267

267-
p,err:=io.ReadAll(resp.Body)
268+
p,err:=util.ReadWithLimit(resp.Body,1024*1024)
268269
iferr!=nil {
269270
t.ResponseInfo.Body=fmt.Sprintf("read body: %s",err)
270271
returnfmt.Errorf("unable to deliver webhook task[%d] in %s as unable to read response body: %w",t.ID,w.URL,err)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp