Skip to content

Commit 4ff0db0

Browse files
Bwkobkcsoft
authored andcommitted
Catch os... errors
1 parent 5ab8537 commit 4ff0db0

File tree

14 files changed

+123
-29
lines changed

14 files changed

+123
-29
lines changed

cmd/dump.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ func runDump(ctx *cli.Context) error {
7979
log.Printf("Packing dump files...")
8080
z, err := zip.Create(fileName)
8181
if err != nil {
82-
os.Remove(fileName)
8382
log.Fatalf("Fail to create %s: %v", fileName, err)
8483
}
8584

@@ -102,7 +101,7 @@ func runDump(ctx *cli.Context) error {
102101
}
103102
// FIXME: SSH key file.
104103
if err = z.Close(); err != nil {
105-
os.Remove(fileName)
104+
_ = os.Remove(fileName)
106105
log.Fatalf("Fail to save %s: %v", fileName, err)
107106
}
108107

@@ -111,7 +110,10 @@ func runDump(ctx *cli.Context) error {
111110
}
112111

113112
log.Printf("Removing tmp work dir: %s", TmpWorkDir)
114-
os.RemoveAll(TmpWorkDir)
113+
114+
if err := os.RemoveAll(TmpWorkDir); err != nil {
115+
log.Fatalf("Fail to remove %s: %v", TmpWorkDir, err)
116+
}
115117
log.Printf("Finish dumping in file %s", fileName)
116118

117119
return nil

cmd/serve.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ func setup(logPath string) {
5151

5252
if setting.UseSQLite3 || setting.UseTiDB {
5353
workDir, _ := setting.WorkDir()
54-
os.Chdir(workDir)
54+
if err := os.Chdir(workDir); err != nil {
55+
log.GitLogger.Fatal(4, "Fail to change directory %s: %v", workDir, err)
56+
}
5557
}
5658

5759
models.SetEngine()

cmd/web.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -654,8 +654,9 @@ func runWeb(ctx *cli.Context) error {
654654
case setting.FCGI:
655655
err = fcgi.Serve(nil, m)
656656
case setting.UnixSocket:
657-
os.Remove(listenAddr)
658-
657+
if err := os.Remove(listenAddr); err != nil {
658+
log.Fatal(4, "Fail to remove unix socket directory %s: %v", listenAddr, err)
659+
}
659660
var listener *net.UnixListener
660661
listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: listenAddr, Net: "unix"})
661662
if err != nil {

main.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"os"
1111
"runtime"
1212

13+
"code.gitea.io/gitea/modules/log"
14+
1315
"code.gitea.io/gitea/cmd"
1416
"code.gitea.io/gitea/modules/setting"
1517
"github.com/urfave/cli"
@@ -37,5 +39,9 @@ func main() {
3739
cmd.CmdAdmin,
3840
}
3941
app.Flags = append(app.Flags, []cli.Flag{}...)
40-
app.Run(os.Args)
42+
err := app.Run(os.Args)
43+
if err != nil {
44+
log.Fatal(4, "Fail to run app with %s: %v", os.Args, err)
45+
}
46+
4147
}

models/models.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,10 @@ func SetEngine() (err error) {
192192
// WARNING: for serv command, MUST remove the output to os.stdout,
193193
// so use log file to instead print to stdout.
194194
logPath := path.Join(setting.LogRootPath, "xorm.log")
195-
os.MkdirAll(path.Dir(logPath), os.ModePerm)
195+
196+
if err := os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
197+
return fmt.Errorf("Fail to create dir %s: %v", logPath, err)
198+
}
196199

197200
f, err := os.Create(logPath)
198201
if err != nil {

models/pull.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,11 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
218218

219219
// Clone base repo.
220220
tmpBasePath := path.Join(setting.AppDataPath, "tmp/repos", com.ToStr(time.Now().Nanosecond())+".git")
221-
os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm)
221+
222+
if err := os.MkdirAll(path.Dir(tmpBasePath), os.ModePerm); err != nil {
223+
return fmt.Errorf("Fail to create dir %s: %v", tmpBasePath, err)
224+
}
225+
222226
defer os.RemoveAll(path.Dir(tmpBasePath))
223227

224228
var stderr string
@@ -622,8 +626,11 @@ func (pr *PullRequest) PushToBaseRepo() (err error) {
622626
headFile := fmt.Sprintf("refs/pull/%d/head", pr.Index)
623627

624628
// Remove head in case there is a conflict.
625-
os.Remove(path.Join(pr.BaseRepo.RepoPath(), headFile))
629+
file := path.Join(pr.BaseRepo.RepoPath(), headFile)
626630

631+
if err := os.Remove(file); err != nil {
632+
return fmt.Errorf("Fail to remove dir %s: %v", path.Join(pr.BaseRepo.RepoPath(), headFile), err)
633+
}
627634
if err = git.Push(headRepoPath, tmpRemoteName, fmt.Sprintf("%s:%s", pr.HeadBranch, headFile)); err != nil {
628635
return fmt.Errorf("Push: %v", err)
629636
}

models/repo.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -558,8 +558,12 @@ func (repo *Repository) SavePatch(index int64, patch []byte) error {
558558
if err != nil {
559559
return fmt.Errorf("PatchPath: %v", err)
560560
}
561+
dir := filepath.Dir(patchPath)
562+
563+
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
564+
return fmt.Errorf("Fail to create dir %s: %v", dir, err)
565+
}
561566

562-
os.MkdirAll(filepath.Dir(patchPath), os.ModePerm)
563567
if err = ioutil.WriteFile(patchPath, patch, 0644); err != nil {
564568
return fmt.Errorf("WriteFile: %v", err)
565569
}
@@ -669,7 +673,10 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
669673

670674
migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second
671675

672-
os.RemoveAll(repoPath)
676+
if err := os.RemoveAll(repoPath); err != nil {
677+
return repo, fmt.Errorf("Fail to remove %s: %v", repoPath, err)
678+
}
679+
673680
if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{
674681
Mirror: true,
675682
Quiet: true,
@@ -680,7 +687,11 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
680687

681688
wikiRemotePath := wikiRemoteURL(opts.RemoteAddr)
682689
if len(wikiRemotePath) > 0 {
683-
os.RemoveAll(wikiPath)
690+
691+
if err := os.RemoveAll(wikiPath); err != nil {
692+
return repo, fmt.Errorf("Fail to remove %s: %v", wikiPath, err)
693+
}
694+
684695
if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{
685696
Mirror: true,
686697
Quiet: true,
@@ -902,7 +913,11 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
902913

903914
// Initialize repository according to user's choice.
904915
if opts.AutoInit {
905-
os.MkdirAll(tmpDir, os.ModePerm)
916+
917+
if err := os.MkdirAll(tmpDir, os.ModePerm); err != nil {
918+
return fmt.Errorf("Fail to create dir %s: %v", tmpDir, err)
919+
}
920+
906921
defer os.RemoveAll(tmpDir)
907922

908923
if err = prepareRepoCommit(repo, tmpDir, repoPath, opts); err != nil {
@@ -1198,7 +1213,12 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
11981213
}
11991214

12001215
// Rename remote repository to new path and delete local copy.
1201-
os.MkdirAll(UserPath(newOwner.Name), os.ModePerm)
1216+
dir := UserPath(newOwner.Name)
1217+
1218+
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
1219+
return fmt.Errorf("Fail to create dir %s: %v", dir, err)
1220+
}
1221+
12021222
if err = os.Rename(RepoPath(owner.Name, repo.Name), RepoPath(newOwner.Name, repo.Name)); err != nil {
12031223
return fmt.Errorf("rename repository directory: %v", err)
12041224
}

models/repo_editor.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,11 @@ func (repo *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) (
104104
localPath := repo.LocalCopyPath()
105105
oldFilePath := path.Join(localPath, opts.OldTreeName)
106106
filePath := path.Join(localPath, opts.NewTreeName)
107-
os.MkdirAll(path.Dir(filePath), os.ModePerm)
107+
dir := path.Dir(filePath)
108+
109+
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
110+
return fmt.Errorf("Fail to create dir %s: %v", dir, err)
111+
}
108112

109113
// If it's meant to be a new file, make sure it doesn't exist.
110114
if opts.IsNewFile {
@@ -185,7 +189,12 @@ func (repo *Repository) GetDiffPreview(branch, treePath, content string) (diff *
185189

186190
localPath := repo.LocalCopyPath()
187191
filePath := path.Join(localPath, treePath)
188-
os.MkdirAll(filepath.Dir(filePath), os.ModePerm)
192+
dir := filepath.Dir(filePath)
193+
194+
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
195+
return nil, fmt.Errorf("Fail to create dir %s: %v", dir, err)
196+
}
197+
189198
if err = ioutil.WriteFile(filePath, []byte(content), 0666); err != nil {
190199
return nil, fmt.Errorf("WriteFile: %v", err)
191200
}
@@ -475,7 +484,10 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions)
475484

476485
localPath := repo.LocalCopyPath()
477486
dirPath := path.Join(localPath, opts.TreePath)
478-
os.MkdirAll(dirPath, os.ModePerm)
487+
488+
if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
489+
return fmt.Errorf("Fail to create dir %s: %v", dirPath, err)
490+
}
479491

480492
// Copy uploaded files into repository.
481493
for _, upload := range uploads {

models/ssh_key.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,12 @@ func addKey(e Engine, key *PublicKey) (err error) {
373373
// Calculate fingerprint.
374374
tmpPath := strings.Replace(path.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
375375
"id_rsa.pub"), "\\", "/", -1)
376-
os.MkdirAll(path.Dir(tmpPath), os.ModePerm)
376+
dir := path.Dir(tmpPath)
377+
378+
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
379+
return fmt.Errorf("Fail to create dir %s: %v", dir, err)
380+
}
381+
377382
if err = ioutil.WriteFile(tmpPath, []byte(key.Content), 0644); err != nil {
378383
return err
379384
}

models/user.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,10 @@ func (u *User) UploadAvatar(data []byte) error {
392392
return fmt.Errorf("updateUser: %v", err)
393393
}
394394

395-
os.MkdirAll(setting.AvatarUploadPath, os.ModePerm)
395+
if err := os.MkdirAll(setting.AvatarUploadPath, os.ModePerm); err != nil {
396+
return fmt.Errorf("Fail to create dir %s: %v", setting.AvatarUploadPath, err)
397+
}
398+
396399
fw, err := os.Create(u.CustomAvatarPath())
397400
if err != nil {
398401
return fmt.Errorf("Create: %v", err)
@@ -409,7 +412,10 @@ func (u *User) UploadAvatar(data []byte) error {
409412
// DeleteAvatar deletes the user's custom avatar.
410413
func (u *User) DeleteAvatar() error {
411414
log.Trace("DeleteAvatar[%d]: %s", u.ID, u.CustomAvatarPath())
412-
os.Remove(u.CustomAvatarPath())
415+
416+
if err := os.Remove(u.CustomAvatarPath()); err != nil {
417+
return fmt.Errorf("Fail to remove %s: %v", u.CustomAvatarPath(), err)
418+
}
413419

414420
u.UseCustomAvatar = false
415421
if err := UpdateUser(u); err != nil {
@@ -866,9 +872,16 @@ func deleteUser(e *xorm.Session, u *User) error {
866872
// FIXME: system notice
867873
// Note: There are something just cannot be roll back,
868874
// so just keep error logs of those operations.
875+
path := UserPath(u.Name)
869876

870-
os.RemoveAll(UserPath(u.Name))
871-
os.Remove(u.CustomAvatarPath())
877+
if err := os.RemoveAll(path); err != nil {
878+
return fmt.Errorf("Fail to RemoveAll %s: %v", path, err)
879+
}
880+
881+
avatarPath := u.CustomAvatarPath()
882+
if err := os.Remove(avatarPath); err != nil {
883+
return fmt.Errorf("Fail to remove %s: %v", avatarPath, err)
884+
}
872885

873886
return nil
874887
}

models/wiki.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,22 @@ func (repo *Repository) updateUncycloPage(doer *User, oldTitle, title, content, mes
112112
return ErrUncycloAlreadyExist{filename}
113113
}
114114
} else {
115-
os.Remove(path.Join(localPath, oldTitle+".md"))
115+
file := path.Join(localPath, oldTitle+".md")
116+
117+
if err := os.Remove(file); err != nil {
118+
return fmt.Errorf("Fail to remove %s: %v", file, err)
119+
}
116120
}
117121

118122
// SECURITY: if new file is a symlink to non-exist critical file,
119123
// attack content can be written to the target file (e.g. authorized_keys2)
120124
// as a new page operation.
121125
// So we want to make sure the symlink is removed before write anything.
122126
// The new file we created will be in normal text format.
123-
os.Remove(filename)
127+
128+
if err := os.Remove(filename); err != nil {
129+
return fmt.Errorf("Fail to remove %s: %v", filename, err)
130+
}
124131

125132
if err = ioutil.WriteFile(filename, []byte(content), 0666); err != nil {
126133
return fmt.Errorf("WriteFile: %v", err)
@@ -168,7 +175,10 @@ func (repo *Repository) DeleteUncycloPage(doer *User, title string) (err error) {
168175

169176
title = ToUncycloPageName(title)
170177
filename := path.Join(localPath, title+".md")
171-
os.Remove(filename)
178+
179+
if err := os.Remove(filename); err != nil {
180+
return fmt.Errorf("Fail to remove %s: %v", filename, err)
181+
}
172182

173183
message := "Delete page '" + title + "'"
174184

modules/log/file.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,10 @@ func (w *FileLogWriter) deleteOldLog() {
219219

220220
if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) {
221221
if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) {
222-
os.Remove(path)
222+
223+
if err := os.Remove(path); err != nil {
224+
returnErr = fmt.Errorf("Fail to remove %s: %v", path, err)
225+
}
223226
}
224227
}
225228
return returnErr

modules/log/log.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ func NewLogger(bufLen int64, mode, config string) {
4242
// NewGitLogger create a logger for git
4343
// FIXME: use same log level as other loggers.
4444
func NewGitLogger(logPath string) {
45-
os.MkdirAll(path.Dir(logPath), os.ModePerm)
45+
path := path.Dir(logPath)
46+
47+
if err := os.MkdirAll(path, os.ModePerm); err != nil {
48+
Fatal(4, "Fail to create dir %s: %v", path, err)
49+
}
50+
4651
GitLogger = newLogger(0)
4752
GitLogger.SetLogger("file", fmt.Sprintf(`{"level":0,"filename":"%s","rotate":false}`, logPath))
4853
}

modules/ssh/ssh.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,12 @@ func Listen(port int) {
162162

163163
keyPath := filepath.Join(setting.AppDataPath, "ssh/gogs.rsa")
164164
if !com.IsExist(keyPath) {
165-
os.MkdirAll(filepath.Dir(keyPath), os.ModePerm)
165+
filePath := filepath.Dir(keyPath)
166+
167+
if err := os.MkdirAll(filePath, os.ModePerm); err != nil {
168+
log.Error(4, "Fail to create dir %s: %v", filePath, err)
169+
}
170+
166171
_, stderr, err := com.ExecCmd("ssh-keygen", "-f", keyPath, "-t", "rsa", "-N", "")
167172
if err != nil {
168173
panic(fmt.Sprintf("Fail to generate private key: %v - %s", err, stderr))

0 commit comments

Comments
 (0)