Fix error handling for bad torrent adds with safe file handling
This commit is contained in:
parent
89235e180f
commit
8088002ba6
|
@ -1150,6 +1150,9 @@ func (cl *Client) AddTorrentInfoHashWithStorage(infoHash metainfo.Hash, specStor
|
|||
func (cl *Client) AddTorrentSpec(spec *TorrentSpec) (t *Torrent, new bool, err error) {
|
||||
t, new = cl.AddTorrentInfoHashWithStorage(spec.InfoHash, spec.Storage)
|
||||
err = t.MergeSpec(spec)
|
||||
if err != nil && new {
|
||||
t.Drop()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ package main
|
|||
import (
|
||||
"expvar"
|
||||
"fmt"
|
||||
stdLog "log"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
|
@ -210,6 +211,7 @@ func main() {
|
|||
}
|
||||
|
||||
func mainErr() error {
|
||||
stdLog.SetFlags(stdLog.Flags() | stdLog.Lshortfile)
|
||||
var flags struct {
|
||||
tagflag.StartPos
|
||||
Command string
|
||||
|
@ -288,7 +290,10 @@ func downloadErr(args []string, parent *tagflag.Parser) error {
|
|||
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
|
||||
client.WriteStatus(w)
|
||||
})
|
||||
addTorrents(client)
|
||||
err = addTorrents(client)
|
||||
if err != nil {
|
||||
return fmt.Errorf("adding torrents: %w", err)
|
||||
}
|
||||
defer outputStats(client)
|
||||
if client.WaitAll() {
|
||||
log.Print("downloaded ALL the torrents")
|
||||
|
|
|
@ -73,7 +73,7 @@ func (fs *fileClientImpl) OpenTorrent(info *metainfo.Info, infoHash metainfo.Has
|
|||
for i, fileInfo := range upvertedFiles {
|
||||
s, err := ToSafeFilePath(append([]string{info.Name}, fileInfo.Path...)...)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("file %v has unsafe path %q", i, fileInfo.Path)
|
||||
return nil, fmt.Errorf("file %v has unsafe path %q: %w", i, fileInfo.Path, err)
|
||||
}
|
||||
f := file{
|
||||
path: filepath.Join(dir, s),
|
||||
|
|
|
@ -2,7 +2,6 @@ package storage
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
@ -21,7 +20,6 @@ func ToSafeFilePath(fileInfoComponents ...string) (string, error) {
|
|||
}
|
||||
safeFilePath := filepath.Join(safeComps...)
|
||||
fc := firstComponent(safeFilePath)
|
||||
log.Printf("%q", fc)
|
||||
switch fc {
|
||||
case "..":
|
||||
return "", errors.New("escapes root dir")
|
||||
|
|
Loading…
Reference in New Issue