Skip to content

Commit 1deae16

Browse files
committed
fix: read the correct number of bytes for the piece
1 parent 1b7ad32 commit 1deae16

File tree

3 files changed

+18
-23
lines changed

3 files changed

+18
-23
lines changed

commp.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import (
1414
// GeneratePieceCIDFromFile generates an a piece cid from an io.Reader
1515
func GeneratePieceCIDFromFile(proofType abi.RegisteredSealProof, piece io.Reader, pieceSize abi.UnpaddedPieceSize) (cid.Cid, error) {
1616
var cc commphh.Calc
17-
if _, err := io.Copy(&cc, piece); err != nil {
17+
expectedBytes := int64(pieceSize)
18+
if _, err := io.CopyN(&cc, piece, expectedBytes); err != nil {
1819
return cid.Undef, err
1920
}
2021
p, _, err := cc.Digest()

commp_test.go

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package commp_test
22

33
import (
44
"bytes"
5+
"io"
56
"testing"
67

78
"github.com/filecoin-project/go-commp-utils/v2"
89
"github.com/filecoin-project/go-state-types/abi"
910
"github.com/ipfs/go-cid"
11+
"github.com/stretchr/testify/require"
1012
)
1113

1214
func TestZeroPadding(t *testing.T) {
@@ -17,34 +19,27 @@ func TestZeroPadding(t *testing.T) {
1719
copy(data, content)
1820

1921
pcid, err := commp.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data), psize)
20-
if err != nil {
21-
t.Fatal(err)
22-
}
22+
require.NoError(t, err)
2323

2424
// value calculated using separate tooling
2525
expCid, err := cid.Decode("baga6ea4seaqozp3abki6vgdf7ztbipcycmxfyt2o64cpuyvdkczsjxsg7bqmioi")
26-
if err != nil {
27-
t.Fatal(err)
28-
}
29-
30-
if pcid != expCid {
31-
t.Fatalf("expected %s, got %s", expCid, pcid)
32-
}
26+
require.NoError(t, err)
27+
require.Equal(t, expCid, pcid)
3328

3429
padded, err := commp.ZeroPadPieceCommitment(pcid, psize, psize*4)
35-
if err != nil {
36-
t.Fatal(err)
37-
}
30+
require.NoError(t, err)
3831

3932
data2 := make([]byte, psize*4)
4033
copy(data2, content)
4134

4235
padExpCid, err := commp.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data2), psize*4)
43-
if err != nil {
44-
t.Fatal(err)
45-
}
36+
require.NoError(t, err)
37+
require.Equal(t, padded, padExpCid)
38+
}
4639

47-
if padded != padExpCid {
48-
t.Fatalf("wrong padding, expected %s, got %s", padExpCid, padded)
49-
}
40+
func TestMismatchedPieceSize(t *testing.T) {
41+
psize := abi.PaddedPieceSize(128).Unpadded()
42+
data := []byte("i am the smallest cat") // less than psize
43+
_, err := commp.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data), psize)
44+
require.ErrorIs(t, err, io.EOF)
5045
}

writer/writer.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ import (
55
"math/bits"
66
"runtime"
77

8-
"github.com/ipfs/go-cid"
9-
"golang.org/x/xerrors"
10-
118
"github.com/filecoin-project/go-padreader"
129
"github.com/filecoin-project/go-state-types/abi"
10+
"github.com/ipfs/go-cid"
11+
"golang.org/x/xerrors"
1312

1413
commp "github.com/filecoin-project/go-commp-utils/v2"
1514
"github.com/filecoin-project/go-commp-utils/v2/zerocomm"

0 commit comments

Comments
 (0)