@@ -56,22 +56,25 @@ func (d *decoder) decode(offset uint, result reflect.Value, depth int) (uint, er
56
56
return d .decodeFromType (typeNum , size , newOffset , result , depth + 1 )
57
57
}
58
58
59
- func (d * decoder ) decodeToDeserializer (offset uint , dser deserializer , depth int ) (uint , error ) {
59
+ func (d * decoder ) decodeToDeserializer (offset uint , dser deserializer , depth int , getNext bool ) (uint , error ) {
60
60
if depth > maximumDataStructureDepth {
61
61
return 0 , newInvalidDatabaseError ("exceeded maximum data structure depth; database is likely corrupt" )
62
62
}
63
- typeNum , size , newOffset , err := d . decodeCtrlData ( offset )
63
+ skip , err := dser . ShouldSkip ( uintptr ( offset ) )
64
64
if err != nil {
65
65
return 0 , err
66
66
}
67
+ if skip {
68
+ if getNext {
69
+ return d .nextValueOffset (offset , 1 )
70
+ }
71
+ return 0 , nil
72
+ }
67
73
68
- skip , err := dser . ShouldSkip ( uintptr ( offset ) )
74
+ typeNum , size , newOffset , err := d . decodeCtrlData ( offset )
69
75
if err != nil {
70
76
return 0 , err
71
77
}
72
- if skip {
73
- return d .nextValueOffset (offset , 1 )
74
- }
75
78
76
79
return d .decodeFromTypeToDeserializer (typeNum , size , newOffset , dser , depth + 1 )
77
80
}
@@ -196,7 +199,7 @@ func (d *decoder) decodeFromTypeToDeserializer(
196
199
if err != nil {
197
200
return 0 , err
198
201
}
199
- _ , err = d .decodeToDeserializer (pointer , dser , depth )
202
+ _ , err = d .decodeToDeserializer (pointer , dser , depth , false )
200
203
return newOffset , err
201
204
case _Slice :
202
205
return d .decodeSliceToDeserializer (size , offset , dser , depth )
@@ -581,12 +584,12 @@ func (d *decoder) decodeMapToDeserializer(
581
584
}
582
585
for i := uint (0 ); i < size ; i ++ {
583
586
// TODO - implement key/value skipping?
584
- offset , err = d .decodeToDeserializer (offset , dser , depth )
587
+ offset , err = d .decodeToDeserializer (offset , dser , depth , true )
585
588
if err != nil {
586
589
return 0 , err
587
590
}
588
591
589
- offset , err = d .decodeToDeserializer (offset , dser , depth )
592
+ offset , err = d .decodeToDeserializer (offset , dser , depth , true )
590
593
if err != nil {
591
594
return 0 , err
592
595
}
@@ -661,7 +664,7 @@ func (d *decoder) decodeSliceToDeserializer(
661
664
return 0 , err
662
665
}
663
666
for i := uint (0 ); i < size ; i ++ {
664
- offset , err = d .decodeToDeserializer (offset , dser , depth )
667
+ offset , err = d .decodeToDeserializer (offset , dser , depth , true )
665
668
if err != nil {
666
669
return 0 , err
667
670
}
0 commit comments