From 6bcec2100c200576173edcc05f4827333f795495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6ran=20Karl?= <3951388+JoeKar@users.noreply.github.com> Date: Sun, 12 May 2024 20:54:38 +0200 Subject: [PATCH] open & write: Process regular files only --- internal/buffer/buffer.go | 11 +++++++---- internal/buffer/save.go | 11 +++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index 092a5dcc..68f5824c 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -237,10 +237,6 @@ func NewBufferFromFileAtLoc(path string, btype BufType, cursorLoc Loc) (*Buffer, return nil, err } - f, err := os.OpenFile(filename, os.O_WRONLY, 0) - readonly := os.IsPermission(err) - f.Close() - fileInfo, serr := os.Stat(filename) if serr != nil && !os.IsNotExist(serr) { return nil, serr @@ -248,6 +244,13 @@ func NewBufferFromFileAtLoc(path string, btype BufType, cursorLoc Loc) (*Buffer, if serr == nil && fileInfo.IsDir() { return nil, errors.New("Error: " + filename + " is a directory and cannot be opened") } + if serr == nil && !fileInfo.Mode().IsRegular() { + return nil, errors.New("Error: " + filename + " is not a regular file and cannot be opened") + } + + f, err := os.OpenFile(filename, os.O_WRONLY, 0) + readonly := os.IsPermission(err) + f.Close() file, err := os.Open(filename) if err == nil { diff --git a/internal/buffer/save.go b/internal/buffer/save.go index 1eb2c089..e927ae14 100644 --- a/internal/buffer/save.go +++ b/internal/buffer/save.go @@ -162,6 +162,17 @@ func (b *Buffer) saveToFile(filename string, withSudo bool, autoSave bool) error // Removes any tilde and replaces with the absolute path to home absFilename, _ := util.ReplaceHome(filename) + fileInfo, err := os.Stat(absFilename) + if err != nil && !errors.Is(err, fs.ErrNotExist) { + return err + } + if err == nil && fileInfo.IsDir() { + return errors.New("Error: " + absFilename + " is a directory and cannot be saved") + } + if err == nil && !fileInfo.Mode().IsRegular() { + return errors.New("Error: " + absFilename + " is not a regular file and cannot be saved") + } + // Get the leading path to the file | "." is returned if there's no leading path provided if dirname := filepath.Dir(absFilename); dirname != "." { // Check if the parent dirs don't exist