misc.go | 6 ++++++ torrent.go | 1 + diff --git a/misc.go b/misc.go index 6b589e2490c0606fc8283aa781a44729bc1f01c8..7e8b70fb9c220fa8f02ec917593cd756d7133636 100644 --- a/misc.go +++ b/misc.go @@ -125,6 +125,7 @@ for _, miFile := range upvertedSingleFileInfoFiles(md) { 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 @@ if err != nil { 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 a4c002d42620b46d07815eb3dcc89ec0f13ec963..5d13d6a91326bb3cd3d53e8b4852dea21f40e01f 100644 --- a/torrent.go +++ b/torrent.go @@ -206,6 +206,7 @@ t.MetaData = infoBytes 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()