github.com/securego/gosec/cmd/gosec utility used.
"txspeed": state.TxSpeed,
}, "")
isGood = true
- conn.Close()
+ conn.Close() // #nosec G104
break
} else {
ctx.LogE("call-start", sds, err, "")
- conn.Close()
+ conn.Close() // #nosec G104
}
}
return
func CfgParse(data []byte) (*Ctx, error) {
var err error
if bytes.Compare(data[:8], MagicNNCPBv3[:]) == 0 {
- os.Stderr.WriteString("Passphrase:")
+ os.Stderr.WriteString("Passphrase:") // #nosec G104
password, err := terminal.ReadPassword(0)
if err != nil {
log.Fatalln(err)
}
- os.Stderr.WriteString("\n")
+ os.Stderr.WriteString("\n") // #nosec G104
data, err = DeEBlob(data, password)
if err != nil {
return nil, err
"fullsize": job.Size,
}
gut, err := Check(job.Fd, job.HshValue[:], sds, ctx.ShowPrgrs)
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
if err != nil {
ctx.LogE("check", sds, err, "")
return true
sds["pkt"] = pktName
if job.PktEnc.Nice > nice {
ctx.LogD("nncp-bundle", sds, "too nice")
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
continue
}
if err = tarWr.WriteHeader(&tar.Header{
); err != nil {
log.Fatalln("Error during copying to tar:", err)
}
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
if err = tarWr.Flush(); err != nil {
log.Fatalln("Error during tar flushing:", err)
}
if err == io.EOF {
break
}
- bufStdin.Discard(bufStdin.Buffered() - (len(nncp.NNCPBundlePrefix) - 1))
+ bufStdin.Discard(bufStdin.Buffered() - (len(nncp.NNCPBundlePrefix) - 1)) // #nosec G104
continue
}
- bufStdin.Discard(prefixIdx)
- tarR = tar.NewReader(bufStdin)
+ if _, err = bufStdin.Discard(prefixIdx); err != nil {
+ panic(err)
+ }
+ tarR := tar.NewReader(bufStdin)
sds["xx"] = string(nncp.TRx)
entry, err := tarR.Next()
if err != nil {
if nncp.Base32Codec.EncodeToString(hsh.Sum(nil)) == pktName {
ctx.LogI("nncp-bundle", sds, "removed")
if !*dryRun {
- os.Remove(dstPath)
+ os.Remove(dstPath) // #nosec G104
}
} else {
ctx.LogE("nncp-bundle", sds, errors.New("bad checksum"), "")
if err = tmp.Sync(); err != nil {
log.Fatalln("Error during syncing:", err)
}
- tmp.Close()
+ if err = tmp.Close(); err != nil {
+ log.Fatalln("Error during closing:", err)
+ }
if err = os.MkdirAll(selfPath, os.FileMode(0777)); err != nil {
log.Fatalln("Error during mkdir:", err)
}
fmt.Printf("Number of rounds: %d\n", eblob.TCost)
fmt.Printf("Number of parallel jobs: %d\n", eblob.PCost)
fmt.Printf("Blob size: %d\n", len(eblob.Blob))
- os.Exit(0)
+ return
+ }
+
+ os.Stderr.WriteString("Passphrase:") // #nosec G104
+ password, err := terminal.ReadPassword(0)
+ if err != nil {
+ log.Fatalln(err)
}
+ os.Stderr.WriteString("\n") // #nosec G104
+
if *decrypt {
- os.Stderr.WriteString("Passphrase:")
- password, err := terminal.ReadPassword(0)
- if err != nil {
- log.Fatalln(err)
- }
- os.Stderr.WriteString("\n")
cfgRaw, err := nncp.DeEBlob(data, password)
if err != nil {
log.Fatalln(err)
}
- os.Stdout.Write(cfgRaw)
- } else {
- os.Stderr.WriteString("Passphrase:")
- password1, err := terminal.ReadPassword(0)
- if err != nil {
- log.Fatalln(err)
- }
- os.Stderr.WriteString("\n")
- os.Stderr.WriteString("Repeat passphrase:")
- password2, err := terminal.ReadPassword(0)
- if err != nil {
- log.Fatalln(err)
- }
- os.Stderr.WriteString("\n")
- if bytes.Compare(password1, password2) != 0 {
- log.Fatalln(errors.New("Passphrases do not match"))
- }
- eblob, err := nncp.NewEBlob(*sOpt, *tOpt, *pOpt, password1, data)
- if err != nil {
- log.Fatalln(err)
- }
- os.Stdout.Write(eblob)
+ os.Stdout.Write(cfgRaw) // #nosec G104
+ return
+ }
+
+ password1, err := terminal.ReadPassword(0)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ os.Stderr.WriteString("\n") // #nosec G104
+ os.Stderr.WriteString("Repeat passphrase:") // #nosec G104
+ password2, err := terminal.ReadPassword(0)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ os.Stderr.WriteString("\n") // #nosec G104
+ if bytes.Compare(password1, password2) != 0 {
+ log.Fatalln(errors.New("Passphrases do not match"))
+ }
+ eblob, err := nncp.NewEBlob(*sOpt, *tOpt, *pOpt, password1, data)
+ if err != nil {
+ log.Fatalln(err)
}
+ os.Stdout.Write(eblob) // #nosec G104
}
func (c InetdConn) Close() error {
if err := c.r.Close(); err != nil {
- c.w.Close()
+ c.w.Close() // #nosec G104
return err
}
return c.w.Close()
ctx.Umask()
if *inetd {
- os.Stderr.Close()
+ os.Stderr.Close() // #nosec G104
conn := &InetdConn{os.Stdin, os.Stdout}
performSP(ctx, conn, nice)
- conn.Close()
+ conn.Close() // #nosec G104
return
}
ctx.LogD("daemon", nncp.SDS{"addr": conn.RemoteAddr()}, "accepted")
go func(conn net.Conn) {
performSP(ctx, conn, nice)
- conn.Close()
+ conn.Close() // #nosec G104
}(conn)
}
}
ctx.LogE("nncp-reass", nncp.SDS{"path": path}, err, "bad meta file")
return false
}
- fd.Close()
+ fd.Close() // #nosec G104
if metaPkt.Magic != nncp.MagicNNCPMv1 {
ctx.LogE("nncp-reass", nncp.SDS{"path": path}, nncp.BadMagic, "")
return false
); err != nil {
log.Fatalln(err)
}
- fd.Close()
+ fd.Close() // #nosec G104
if bytes.Compare(hsh.Sum(nil), metaPkt.Checksums[chunkNum][:]) != 0 {
ctx.LogE(
"nncp-reass",
); err != nil {
log.Fatalln(err)
}
- fd.Close()
+ fd.Close() // #nosec G104
if !keep {
if err = os.Remove(chunkPath); err != nil {
ctx.LogE("nncp-reass", nncp.SdsAdd(sds, nncp.SDS{"chunk": chunkNum}), err, "")
if err = tmp.Sync(); err != nil {
log.Fatalln("Can not sync:", err)
}
- tmp.Close()
+ if err = tmp.Close(); err != nil {
+ log.Fatalln("Can not close:", err)
+ }
}
ctx.LogD("nncp-reass", sds, "written")
if !keep {
return nil
}
fis, err := dir.Readdir(0)
- dir.Close()
+ dir.Close() // #nosec G104
if err != nil {
ctx.LogE("nncp-reass", nncp.SDS{"path": dirPath}, err, "")
return nil
rxNums := make(map[uint8]int)
rxBytes := make(map[uint8]int64)
for job := range ctx.Jobs(node.Id, nncp.TRx) {
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
if *showPkt {
jobPrint(nncp.TRx, job)
}
txNums := make(map[uint8]int)
txBytes := make(map[uint8]int64)
for job := range ctx.Jobs(node.Id, nncp.TTx) {
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
if *showPkt {
jobPrint(nncp.TRx, job)
}
goto Tx
}
fis, err = dir.Readdir(0)
- dir.Close()
+ dir.Close() // #nosec G104
if err != nil {
ctx.LogE("nncp-xfer", sds, err, "read")
isBad = true
continue
}
fisInt, err := dir.Readdir(0)
- dir.Close()
+ dir.Close() // #nosec G104
if err != nil {
ctx.LogE("nncp-xfer", sds, err, "read")
isBad = true
_, err = xdr.Unmarshal(fd, &pktEnc)
if err != nil || pktEnc.Magic != nncp.MagicNNCPEv4 {
ctx.LogD("nncp-xfer", sds, "is not a packet")
- fd.Close()
+ fd.Close() // #nosec G104
continue
}
if pktEnc.Nice > nice {
ctx.LogD("nncp-xfer", sds, "too nice")
- fd.Close()
+ fd.Close() // #nosec G104
continue
}
sds["size"] = fiInt.Size()
if !ctx.IsEnoughSpace(fiInt.Size()) {
ctx.LogE("nncp-xfer", sds, errors.New("is not enough space"), "")
- fd.Close()
+ fd.Close() // #nosec G104
continue
}
- fd.Seek(0, 0)
+ if _, err = fd.Seek(0, 0); err != nil {
+ log.Fatalln(err)
+ }
tmp, err := ctx.NewTmpFileWHash()
if err != nil {
log.Fatalln(err)
go func() {
_, err := io.CopyN(w, bufio.NewReader(fd), fiInt.Size())
if err == nil {
- w.Close()
- return
+ err = w.Close()
+ }
+ if err != nil {
+ ctx.LogE("nncp-xfer", sds, err, "copy")
+ w.CloseWithError(err) // #nosec G104
}
- ctx.LogE("nncp-xfer", sds, err, "copy")
- w.CloseWithError(err)
}()
if _, err = nncp.CopyProgressed(
tmp.W, r, "Rx",
ctx.LogE("nncp-xfer", sds, err, "copy")
isBad = true
}
- fd.Close()
+ fd.Close() // #nosec G104
if isBad {
tmp.Cancel()
continue
sds["pkt"] = pktName
if job.PktEnc.Nice > nice {
ctx.LogD("nncp-xfer", sds, "too nice")
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
continue
}
if _, err = os.Stat(filepath.Join(dstPath, pktName)); err == nil || !os.IsNotExist(err) {
ctx.LogD("nncp-xfer", sds, "already exists")
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
continue
}
if _, err = os.Stat(filepath.Join(dstPath, pktName+nncp.SeenSuffix)); err == nil || !os.IsNotExist(err) {
ctx.LogD("nncp-xfer", sds, "already exists")
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
continue
}
tmp, err := nncp.TempFile(dstPath, "xfer")
if err != nil {
ctx.LogE("nncp-xfer", sds, err, "mktemp")
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
isBad = true
break
}
nncp.SdsAdd(sds, nncp.SDS{"fullsize": job.Size}),
ctx.ShowPrgrs,
)
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
if err != nil {
ctx.LogE("nncp-xfer", sds, err, "copy")
- tmp.Close()
+ tmp.Close() // #nosec G104
isBad = true
continue
}
if err = bufW.Flush(); err != nil {
- tmp.Close()
+ tmp.Close() // #nosec G104
ctx.LogE("nncp-xfer", sds, err, "flush")
isBad = true
continue
}
if err = tmp.Sync(); err != nil {
- tmp.Close()
+ tmp.Close() // #nosec G104
ctx.LogE("nncp-xfer", sds, err, "sync")
isBad = true
continue
}
- tmp.Close()
+ if err = tmp.Close(); err != nil {
+ ctx.LogE("nncp-xfer", sds, err, "sync")
+ }
if err = os.Rename(tmp.Name(), filepath.Join(dstPath, pktName)); err != nil {
ctx.LogE("nncp-xfer", sds, err, "rename")
isBad = true
isBad = true
continue
}
- os.Remove(filepath.Join(dstPath, pktName+".part"))
+ os.Remove(filepath.Join(dstPath, pktName+".part")) // #nosec G104
delete(sds, "tmp")
ctx.LogI("nncp-xfer", nncp.SdsAdd(sds, nncp.SDS{"size": copied}), "")
if !*keep {
ctx.LogE("dir-ensure", SDS{"dir": dirPath}, err, "")
return err
}
- fd.Close()
- return nil
+ return fd.Close()
}
func CtxFromCmdline(
return
}
fis, err := dir.Readdir(0)
- dir.Close()
+ dir.Close() // #nosec G104
if err != nil {
return
}
}
var pktEnc PktEnc
if _, err = xdr.Unmarshal(fd, &pktEnc); err != nil || pktEnc.Magic != MagicNNCPEv4 {
- fd.Close()
+ fd.Close() // #nosec G104
+ continue
+ }
+ if _, err = fd.Seek(0, io.SeekStart); err != nil {
+ fd.Close() // #nosec G104
continue
}
- fd.Seek(0, io.SeekStart)
ctx.LogD("jobs", SDS{
"xx": string(xx),
"node": pktEnc.Sender,
err = unix.Flock(int(dirLock.Fd()), unix.LOCK_EX|unix.LOCK_NB)
if err != nil {
ctx.LogE("lockdir", SDS{"path": lockPath}, err, "")
- dirLock.Close()
+ dirLock.Close() // #nosec G104
return nil, err
}
return dirLock, nil
func (ctx *Ctx) UnlockDir(fd *os.File) {
if fd != nil {
- unix.Flock(int(fd.Fd()), unix.LOCK_UN)
- fd.Close()
+ unix.Flock(int(fd.Fd()), unix.LOCK_UN) // #nosec G104
+ fd.Close() // #nosec G104
}
}
fmt.Fprintln(os.Stderr, "Can not open log:", err)
return
}
- fd.WriteString(msg)
- fd.Close()
+ fd.WriteString(msg) // #nosec G104
+ fd.Close() // #nosec G104
}
func (ctx *Ctx) LogD(who string, sds SDS, msg string) {
}
func (c PipeConn) Close() (err error) {
- c.r.Close()
+ err = c.r.Close()
err = c.w.Close()
go c.cmd.Wait()
- time.AfterFunc(time.Duration(10*time.Second), func() { c.cmd.Process.Kill() })
+ time.AfterFunc(time.Duration(10*time.Second), func() {
+ c.cmd.Process.Kill() // #nosec G104
+ })
return
}
var infos []*SPInfo
var totalSize int64
for job := range ctx.Jobs(nodeId, TTx) {
- job.Fd.Close()
+ job.Fd.Close() // #nosec G104
if job.PktEnc.Nice > nice {
continue
}
}
sds := SDS{"node": nodeId, "nice": int(state.Nice)}
state.Ctx.LogD("sp-start", sds, "sending first message")
- conn.SetWriteDeadline(time.Now().Add(DefaultDeadline))
+ conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104
if err = state.WriteSP(conn, buf, false); err != nil {
state.Ctx.LogE("sp-start", sds, err, "")
state.dirUnlock()
return err
}
state.Ctx.LogD("sp-start", sds, "waiting for first message")
- conn.SetReadDeadline(time.Now().Add(DefaultDeadline))
+ conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104
if buf, err = state.ReadSP(conn); err != nil {
state.Ctx.LogE("sp-start", sds, err, "")
state.dirUnlock()
var buf []byte
var payload []byte
state.Ctx.LogD("sp-start", SDS{"nice": int(state.Nice)}, "waiting for first message")
- conn.SetReadDeadline(time.Now().Add(DefaultDeadline))
+ conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104
if buf, err = state.ReadSP(conn); err != nil {
state.Ctx.LogE("sp-start", SDS{}, err, "")
return err
state.dirUnlock()
return err
}
- conn.SetWriteDeadline(time.Now().Add(DefaultDeadline))
+ conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104
if err = state.WriteSP(conn, buf, false); err != nil {
state.Ctx.LogE("sp-start", sds, err, "")
state.dirUnlock()
(state.maxOnlineTime > 0 && state.mustFinishAt.Before(now)) ||
(now.Sub(state.RxLastSeen) >= 2*PingTimeout) {
state.SetDead()
- conn.Close()
+ conn.Close() // #nosec G104
}
case now := <-pingTicker.C:
if now.After(state.TxLastSeen.Add(PingTimeout)) {
buf = buf[:n]
state.Ctx.LogD("sp-file", SdsAdd(sdsp, SDS{"size": n}), "read")
}
- fd.Close()
+ fd.Close() // #nosec G104
payload = MarshalSP(SPTypeFile, SPFile{
Hash: freq.Hash,
Offset: freq.Offset,
state.Unlock()
}
state.Ctx.LogD("sp-xmit", SdsAdd(sds, SDS{"size": len(payload)}), "sending")
- conn.SetWriteDeadline(time.Now().Add(DefaultDeadline))
+ conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104
if err := state.WriteSP(conn, state.csOur.Encrypt(nil, nil, payload), ping); err != nil {
state.Ctx.LogE("sp-xmit", sds, err, "")
return
break
}
state.Ctx.LogD("sp-recv", sds, "waiting for payload")
- conn.SetReadDeadline(time.Now().Add(DefaultDeadline))
+ conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104
payload, err := state.ReadSP(conn)
if err != nil {
if err == io.EOF {
state.SetDead()
state.wg.Done()
state.SetDead()
- conn.Close()
+ conn.Close() // #nosec G104
}()
return nil
)
if _, err = fd.Seek(int64(file.Offset), io.SeekStart); err != nil {
state.Ctx.LogE("sp-file", sdsp, err, "")
- fd.Close()
+ fd.Close() // #nosec G104
return nil, err
}
state.Ctx.LogD("sp-file", sdsp, "writing")
_, err = fd.Write(file.Payload)
if err != nil {
state.Ctx.LogE("sp-file", sdsp, err, "")
- fd.Close()
+ fd.Close() // #nosec G104
return nil, err
}
ourSize := int64(file.Offset + uint64(len(file.Payload)))
Progress("Rx", sdsp)
}
if fullsize != ourSize {
- fd.Close()
+ fd.Close() // #nosec G104
continue
}
spWorkersGroup.Wait()
go func() {
if err := fd.Sync(); err != nil {
state.Ctx.LogE("sp-file", sdsp, err, "sync")
- fd.Close()
+ fd.Close() // #nosec G104
return
}
state.wg.Add(1)
fd.Seek(0, io.SeekStart)
state.Ctx.LogD("sp-file", sdsp, "checking")
gut, err := Check(fd, file.Hash[:], sdsp, state.Ctx.ShowPrgrs)
- fd.Close()
+ fd.Close() // #nosec G104
if err != nil || !gut {
state.Ctx.LogE("sp-file", sdsp, errors.New("checksum mismatch"), "")
return
}
func (tmp *TmpFileWHash) Cancel() {
- tmp.Fd.Truncate(0)
- tmp.Fd.Close()
- os.Remove(tmp.Fd.Name())
+ tmp.Fd.Truncate(0) // #nosec G104
+ tmp.Fd.Close() // #nosec G104
+ os.Remove(tmp.Fd.Name()) // #nosec G104
}
func DirSync(dirPath string) error {
}
err = fd.Sync()
if err != nil {
- fd.Close()
+ fd.Close() // #nosec G104
return err
}
return fd.Close()
return err
}
if err = tmp.W.Flush(); err != nil {
- tmp.Fd.Close()
+ tmp.Fd.Close() // #nosec G104
return err
}
if err = tmp.Fd.Sync(); err != nil {
- tmp.Fd.Close()
+ tmp.Fd.Close() // #nosec G104
return err
}
tmp.Fd.Close()
if !dryRun {
if doSeen {
if fd, err := os.Create(job.Fd.Name() + SeenSuffix); err == nil {
- fd.Close()
+ fd.Close() // #nosec G104
}
}
if err = os.Remove(job.Fd.Name()); err != nil {
goto Closing
}
if err = bufW.Flush(); err != nil {
- tmp.Close()
+ tmp.Close() // #nosec G104
ctx.LogE("rx", sds, err, "copy")
isBad = true
goto Closing
}
if err = tmp.Sync(); err != nil {
- tmp.Close()
+ tmp.Close() // #nosec G104
ctx.LogE("rx", sds, err, "copy")
isBad = true
goto Closing
if !dryRun {
if doSeen {
if fd, err := os.Create(job.Fd.Name() + SeenSuffix); err == nil {
- fd.Close()
+ fd.Close() // #nosec G104
}
}
if err = os.Remove(job.Fd.Name()); err != nil {
if !dryRun {
if doSeen {
if fd, err := os.Create(job.Fd.Name() + SeenSuffix); err == nil {
- fd.Close()
+ fd.Close() // #nosec G104
}
}
if err = os.Remove(job.Fd.Name()); err != nil {
if !dryRun {
if doSeen {
if fd, err := os.Create(job.Fd.Name() + SeenSuffix); err == nil {
- fd.Close()
+ fd.Close() // #nosec G104
}
}
if err = os.Remove(job.Fd.Name()); err != nil {
isBad = true
}
Closing:
- pipeR.Close()
+ pipeR.Close() // #nosec G104
}
return isBad
}
"size": size,
}, "wrote")
errs <- PktEncWrite(ctx.Self, hops[0], pkt, nice, size, padSize, src, dst)
- dst.Close()
+ dst.Close() // #nosec G104
}(curSize, src, pipeW)
curSize = PktEncOverhead + PktSizeOverhead + sizeWithTags(PktOverhead+curSize) + padSize
"size": size,
}, "trns wrote")
errs <- PktEncWrite(ctx.Self, node, pkt, nice, size, 0, src, dst)
- dst.Close()
+ dst.Close() // #nosec G104
}(hops[i], pktTrns, curSize, pipeRPrev, pipeW)
curSize = PktEncOverhead + PktSizeOverhead + sizeWithTags(PktOverhead+curSize)
}
for i := 0; i <= len(hops); i++ {
err = <-errs
if err != nil {
- tmp.Fd.Close()
+ tmp.Fd.Close() // #nosec G104
return nil, err
}
}
nodePath := filepath.Join(ctx.Spool, lastNode.Id.String())
err = tmp.Commit(filepath.Join(nodePath, string(TTx)))
- os.Symlink(nodePath, filepath.Join(ctx.Spool, lastNode.Name))
+ os.Symlink(nodePath, filepath.Join(ctx.Spool, lastNode.Name)) // #nosec G104
return lastNode, err
}
rerr = err
return
}
- os.Remove(src.Name())
+ os.Remove(src.Name()) // #nosec G104
tmpW := bufio.NewWriter(src)
tmpKey := make([]byte, chacha20poly1305.KeySize)
if _, rerr = rand.Read(tmpKey[:]); rerr != nil {
r, w := io.Pipe()
go func() {
if _, err := aeadProcess(aead, nonce, false, bufio.NewReader(src), w); err != nil {
- w.CloseWithError(err)
+ w.CloseWithError(err) // #nosec G104
}
}()
reader = r
closer = DummyCloser{}
fileSize += 2 * TarBlockSize // termination block
- go func() {
+ go func() error {
tarWr := tar.NewWriter(w)
hdr := tar.Header{
Typeflag: tar.TypeDir,
hdr.Name = basePath + e.path[len(rootPath):]
hdr.ModTime = e.modTime
if err = tarWr.WriteHeader(&hdr); err != nil {
- w.CloseWithError(err)
+ return w.CloseWithError(err)
}
}
hdr.Typeflag = tar.TypeReg
hdr.ModTime = e.modTime
hdr.Size = e.size
if err = tarWr.WriteHeader(&hdr); err != nil {
- w.CloseWithError(err)
+ return w.CloseWithError(err)
}
fd, err := os.Open(e.path)
if err != nil {
} else {
ctx.LogI("tx", SdsAdd(sds, SDS{"err": err}), "sent")
}
- os.Symlink(nodePath, filepath.Join(ctx.Spool, node.Name))
+ os.Symlink(nodePath, filepath.Join(ctx.Spool, node.Name)) // #nosec G104
return err
}