cache: fix nil pointer deref when using lsjson on cached directory

This stops embedding the fs.Directory into the cache.Directory because
it can be nil and implements an ID method which checks the nil status.

See: https://forum.rclone.org/t/runtime-error-with-cache-remote-and-lsjson/6305
This commit is contained in:
Nick Craig-Wood 2018-07-31 11:22:45 +01:00
parent 1f3778dbfb
commit ffd11662ba

View file

@ -12,7 +12,7 @@ import (
// Directory is a generic dir that stores basic information about it // Directory is a generic dir that stores basic information about it
type Directory struct { type Directory struct {
fs.Directory `json:"-"` Directory fs.Directory `json:"-"` // can be nil
CacheFs *Fs `json:"-"` // cache fs CacheFs *Fs `json:"-"` // cache fs
Name string `json:"name"` // name of the directory Name string `json:"name"` // name of the directory
@ -125,6 +125,14 @@ func (d *Directory) Items() int64 {
return d.CacheItems return d.CacheItems
} }
// ID returns the ID of the cached directory if known
func (d *Directory) ID() string {
if d.Directory == nil {
return ""
}
return d.Directory.ID()
}
var ( var (
_ fs.Directory = (*Directory)(nil) _ fs.Directory = (*Directory)(nil)
) )