From 5c8de6dd7cb925b85b9a18bd58fd5e6d6c0302fb Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 1 Dec 2014 19:13:08 -0600 Subject: [PATCH] Skip mapping files with length 0 --- misc.go | 6 ++++++ torrent.go | 1 + 2 files changed, 7 insertions(+) diff --git a/misc.go b/misc.go index 6b589e24..7e8b70fb 100644 --- a/misc.go +++ b/misc.go @@ -125,6 +125,7 @@ func mmapTorrentData(md *metainfo.Info, location string) (mms mmap_span.MMapSpan fileName := filepath.Join(append([]string{location, md.Name}, miFile.Path...)...) err = os.MkdirAll(filepath.Dir(fileName), 0777) if err != nil { + err = fmt.Errorf("error creating data directory %q: %s", filepath.Dir(fileName), err) return } var file *os.File @@ -145,9 +146,14 @@ func mmapTorrentData(md *metainfo.Info, location string) (mms mmap_span.MMapSpan return } } + if miFile.Length == 0 { + // Can't mmap() regions with length 0. + return + } var mMap gommap.MMap mMap, err = gommap.MapRegion(file.Fd(), 0, miFile.Length, gommap.PROT_READ|gommap.PROT_WRITE, gommap.MAP_SHARED) if err != nil { + err = fmt.Errorf("error mapping file %q, length %d: %s", file.Name(), miFile.Length, err) return } if int64(len(mMap)) != miFile.Length { diff --git a/torrent.go b/torrent.go index a4c002d4..5d13d6a9 100644 --- a/torrent.go +++ b/torrent.go @@ -206,6 +206,7 @@ func (t *torrent) setMetadata(md metainfo.Info, dataDir string, infoBytes []byte t.metadataHave = nil t.Data, err = mmapTorrentData(&md, dataDir) if err != nil { + err = fmt.Errorf("error mmap'ing torrent data: %s", err) return } t.length = t.Data.Size() -- 2.48.1