diff --git a/index/scorch/persister.go b/index/scorch/persister.go index ed0fc40e0..d59f733df 100644 --- a/index/scorch/persister.go +++ b/index/scorch/persister.go @@ -829,6 +829,10 @@ func (s *Scorch) loadSnapshot(snapshot *bolt.Bucket) (*IndexSnapshot, error) { for k, _ := c.First(); k != nil; k, _ = c.Next() { if k[0] == boltInternalKey[0] { internalBucket := snapshot.Bucket(k) + if internalBucket == nil { + _ = rv.DecRef() + return nil, fmt.Errorf("internal bucket missing") + } err := internalBucket.ForEach(func(key []byte, val []byte) error { copiedVal := append([]byte(nil), val...) rv.internal[string(key)] = copiedVal @@ -1201,6 +1205,9 @@ func (s *Scorch) rootBoltSnapshotMetaData() ([]*snapshotMetaData, error) { } snapshot := snapshots.Bucket(sk) + if snapshot == nil { + continue + } metaBucket := snapshot.Bucket(boltMetaDataKey) if metaBucket == nil { continue diff --git a/index/scorch/rollback.go b/index/scorch/rollback.go index 067220e6f..895f939dd 100644 --- a/index/scorch/rollback.go +++ b/index/scorch/rollback.go @@ -89,6 +89,10 @@ func RollbackPoints(path string) ([]*RollbackPoint, error) { for j, _ := c2.First(); j != nil; j, _ = c2.Next() { if j[0] == boltInternalKey[0] { internalBucket := snapshot.Bucket(j) + if internalBucket == nil { + err = fmt.Errorf("internal bucket missing") + break + } err = internalBucket.ForEach(func(key []byte, val []byte) error { copiedVal := append([]byte(nil), val...) meta[string(key)] = copiedVal