(r io.ByteReader)
| 73 | } |
| 74 | |
| 75 | func readUint64(r io.ByteReader) (uint64, error) { |
| 76 | b, err := r.ReadByte() |
| 77 | if err != nil { |
| 78 | return 0, fmt.Errorf("readUint64: ReadByte error: %w", err) |
| 79 | } |
| 80 | |
| 81 | l := bits.LeadingZeros8(^b) |
| 82 | |
| 83 | var v uint64 |
| 84 | if l < 7 { |
| 85 | v |= uint64(b&((1<<(8-l))-1)) << (8 * l) |
| 86 | } |
| 87 | |
| 88 | for i := range l { |
| 89 | b, err := r.ReadByte() |
| 90 | if err != nil { |
| 91 | return 0, fmt.Errorf("readUint64: ReadByte error: %w", err) |
| 92 | } |
| 93 | |
| 94 | v |= uint64(b) << (8 * i) |
| 95 | } |
| 96 | |
| 97 | return v, nil |
| 98 | } |
| 99 | |
| 100 | // readUint64Bounded is for values that are ultimately used as the length |
| 101 | // argument of a slice. Fuzzing can generate lengths that will cause a panic. |
no test coverage detected
searching dependent graphs…