diff options
| -rw-r--r-- | packed_read_idx.go | 26 | ||||
| -rw-r--r-- | packed_write_test.go | 34 |
2 files changed, 23 insertions, 37 deletions
diff --git a/packed_read_idx.go b/packed_read_idx.go index 0dbb9bcf..515ccdc0 100644 --- a/packed_read_idx.go +++ b/packed_read_idx.go @@ -2,6 +2,7 @@ package furgit import ( "bytes" + "encoding/binary" "errors" "fmt" "os" @@ -146,10 +147,10 @@ func (pi *packIndex) parse(buf []byte) error { if len(buf) < 8+256*4 { return ErrInvalidObject } - if readBE32(buf[0:4]) != idxMagic { + if binary.BigEndian.Uint32(buf[0:4]) != idxMagic { return ErrInvalidObject } - if readBE32(buf[4:8]) != idxVersion2 { + if binary.BigEndian.Uint32(buf[4:8]) != idxVersion2 { return ErrInvalidObject } @@ -160,7 +161,7 @@ func (pi *packIndex) parse(buf []byte) error { return ErrInvalidObject } pi.fanout = buf[fanoutStart:fanoutEnd] - nobj := int(readBE32(pi.fanout[len(pi.fanout)-4:])) + nobj := int(binary.BigEndian.Uint32(pi.fanout[len(pi.fanout)-4:])) namesStart := fanoutEnd namesEnd := namesStart + nobj*pi.repo.hashAlgo.Size() @@ -199,19 +200,6 @@ func (pi *packIndex) parse(buf []byte) error { return nil } -func readBE32(b []byte) uint32 { - _ = b[3] - return uint32(b[0])<<24 | uint32(b[1])<<16 | uint32(b[2])<<8 | uint32(b[3]) -} - -func readBE64(b []byte) uint64 { - _ = b[7] - return (uint64(b[0]) << 56) | (uint64(b[1]) << 48) | - (uint64(b[2]) << 40) | (uint64(b[3]) << 32) | - (uint64(b[4]) << 24) | (uint64(b[5]) << 16) | - (uint64(b[6]) << 8) | uint64(b[7]) -} - func (pi *packIndex) fanoutEntry(i int) uint32 { if len(pi.fanout) == 0 { return 0 @@ -221,12 +209,12 @@ func (pi *packIndex) fanoutEntry(i int) uint32 { return 0 } start := i * 4 - return readBE32(pi.fanout[start : start+4]) + return binary.BigEndian.Uint32(pi.fanout[start : start+4]) } func (pi *packIndex) offset(idx int) (uint64, error) { start := idx * 4 - word := readBE32(pi.offset32[start : start+4]) + word := binary.BigEndian.Uint32(pi.offset32[start : start+4]) if word&0x80000000 == 0 { return uint64(word), nil } @@ -236,7 +224,7 @@ func (pi *packIndex) offset(idx int) (uint64, error) { return 0, errors.New("furgit: pack: corrupt 64-bit offset table") } base := pos * 8 - return readBE64(pi.offset64[base : base+8]), nil + return binary.BigEndian.Uint64(pi.offset64[base : base+8]), nil } func (pi *packIndex) lookup(id Hash) (packlocation, error) { diff --git a/packed_write_test.go b/packed_write_test.go index 63fd9266..ccd81844 100644 --- a/packed_write_test.go +++ b/packed_write_test.go @@ -3,6 +3,7 @@ package furgit import ( "bytes" "crypto/rand" + "encoding/binary" "fmt" "os" "os/exec" @@ -365,7 +366,7 @@ func checkPackStream(path string, algo hashAlgorithm, objectCount int) error { if len(data) < 12 { return ErrInvalidObject } - if readBE32(data[0:4]) != packMagic || readBE32(data[4:8]) != packVersion2 { + if binary.BigEndian.Uint32(data[0:4]) != packMagic || binary.BigEndian.Uint32(data[4:8]) != packVersion2 { return ErrInvalidObject } pos := 12 @@ -433,9 +434,14 @@ func checkPackStream(path string, algo hashAlgorithm, objectCount int) error { if baseBody == nil { return fmt.Errorf("obj %d missing base body", i) } - baseSize, resultSize, err := readDeltaSizes(payload) + pos := 0 + baseSize, err := packVarintRead(payload, &pos) if err != nil { - return fmt.Errorf("obj %d delta sizes: %v", i, err) + return fmt.Errorf("obj %d delta base size: %v", i, err) + } + resultSize, err := packVarintRead(payload, &pos) + if err != nil { + return fmt.Errorf("obj %d delta result size: %v", i, err) } if baseSize != len(baseBody) { return fmt.Errorf("obj %d delta base size mismatch: got %d want %d", i, baseSize, len(baseBody)) @@ -454,9 +460,14 @@ func checkPackStream(path string, algo hashAlgorithm, objectCount int) error { if baseBody == nil { return fmt.Errorf("obj %d missing ref base body", i) } - baseSize, resultSize, err := readDeltaSizes(payload) + pos := 0 + baseSize, err := packVarintRead(payload, &pos) if err != nil { - return fmt.Errorf("obj %d ref delta sizes: %v", i, err) + return fmt.Errorf("obj %d ref delta base size: %v", i, err) + } + resultSize, err := packVarintRead(payload, &pos) + if err != nil { + return fmt.Errorf("obj %d ref delta result size: %v", i, err) } if baseSize != len(baseBody) { return fmt.Errorf("obj %d ref delta base size mismatch: got %d want %d", i, baseSize, len(baseBody)) @@ -493,19 +504,6 @@ func checkPackStream(path string, algo hashAlgorithm, objectCount int) error { return nil } -func readDeltaSizes(delta []byte) (int, int, error) { - pos := 0 - baseSize, err := packVarintRead(delta, &pos) - if err != nil { - return 0, 0, err - } - resultSize, err := packVarintRead(delta, &pos) - if err != nil { - return 0, 0, err - } - return baseSize, resultSize, nil -} - func removeLooseObject(repoPath, oid string) error { if len(oid) < 2 { return ErrInvalidObject |
