File tree Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ package profile
2424import (
2525 "errors"
2626 "fmt"
27+ "slices"
2728)
2829
2930type buffer struct {
@@ -175,6 +176,16 @@ func le32(p []byte) uint32 {
175176 return uint32 (p [0 ]) | uint32 (p [1 ])<< 8 | uint32 (p [2 ])<< 16 | uint32 (p [3 ])<< 24
176177}
177178
179+ func peekNumVarints (data []byte ) (numVarints int ) {
180+ for ; len (data ) > 0 ; numVarints ++ {
181+ var err error
182+ if _ , data , err = decodeVarint (data ); err != nil {
183+ break
184+ }
185+ }
186+ return numVarints
187+ }
188+
178189func decodeVarint (data []byte ) (uint64 , []byte , error ) {
179190 var i int
180191 var u uint64
@@ -275,6 +286,9 @@ func decodeInt64(b *buffer, x *int64) error {
275286func decodeInt64s (b * buffer , x * []int64 ) error {
276287 if b .typ == 2 {
277288 // Packed encoding
289+ dataLen := peekNumVarints (b .data )
290+ * x = slices .Grow (* x , dataLen )
291+
278292 data := b .data
279293 for len (data ) > 0 {
280294 var u uint64
@@ -305,8 +319,11 @@ func decodeUint64(b *buffer, x *uint64) error {
305319
306320func decodeUint64s (b * buffer , x * []uint64 ) error {
307321 if b .typ == 2 {
308- data := b .data
309322 // Packed encoding
323+ dataLen := peekNumVarints (b .data )
324+ * x = slices .Grow (* x , dataLen )
325+
326+ data := b .data
310327 for len (data ) > 0 {
311328 var u uint64
312329 var err error
You can’t perform that action at this time.
0 commit comments