Skip to content

Commit 09daf56

Browse files
authored
MB-62124: Dealing with bolt panics while reading (#2043)
- Added checks for cases where bolt buckets are nil
1 parent 8974ec5 commit 09daf56

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

index/scorch/persister.go

+7
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,10 @@ func (s *Scorch) loadSnapshot(snapshot *bolt.Bucket) (*IndexSnapshot, error) {
829829
for k, _ := c.First(); k != nil; k, _ = c.Next() {
830830
if k[0] == boltInternalKey[0] {
831831
internalBucket := snapshot.Bucket(k)
832+
if internalBucket == nil {
833+
_ = rv.DecRef()
834+
return nil, fmt.Errorf("internal bucket missing")
835+
}
832836
err := internalBucket.ForEach(func(key []byte, val []byte) error {
833837
copiedVal := append([]byte(nil), val...)
834838
rv.internal[string(key)] = copiedVal
@@ -1201,6 +1205,9 @@ func (s *Scorch) rootBoltSnapshotMetaData() ([]*snapshotMetaData, error) {
12011205
}
12021206

12031207
snapshot := snapshots.Bucket(sk)
1208+
if snapshot == nil {
1209+
continue
1210+
}
12041211
metaBucket := snapshot.Bucket(boltMetaDataKey)
12051212
if metaBucket == nil {
12061213
continue

index/scorch/rollback.go

+4
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ func RollbackPoints(path string) ([]*RollbackPoint, error) {
8989
for j, _ := c2.First(); j != nil; j, _ = c2.Next() {
9090
if j[0] == boltInternalKey[0] {
9191
internalBucket := snapshot.Bucket(j)
92+
if internalBucket == nil {
93+
err = fmt.Errorf("internal bucket missing")
94+
break
95+
}
9296
err = internalBucket.ForEach(func(key []byte, val []byte) error {
9397
copiedVal := append([]byte(nil), val...)
9498
meta[string(key)] = copiedVal

0 commit comments

Comments
 (0)