Smail/backend/hooks/bundle_file_windows.go

40 lines
721 B
Go

//go:build windows
package hooks
import (
"bytes"
"io"
"os"
)
func writeBundledPlugin(path string, data []byte) error {
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) // #nosec G304 -- the path is an entry under a private temporary bundle root.
if err != nil {
return err
}
remove := true
defer func() {
if remove {
_ = os.Remove(path)
}
}()
if _, err := io.Copy(file, bytes.NewReader(data)); err != nil {
_ = file.Close()
return err
}
if err := file.Sync(); err != nil {
_ = file.Close()
return err
}
if err := file.Chmod(0700); err != nil {
_ = file.Close()
return err
}
if err := file.Close(); err != nil {
return err
}
remove = false
return nil
}