diff --git a/commp.go b/commp.go index 6db13fb..ec0cf60 100644 --- a/commp.go +++ b/commp.go @@ -14,7 +14,8 @@ import ( // GeneratePieceCIDFromFile generates an a piece cid from an io.Reader func GeneratePieceCIDFromFile(proofType abi.RegisteredSealProof, piece io.Reader, pieceSize abi.UnpaddedPieceSize) (cid.Cid, error) { var cc commphh.Calc - if _, err := io.Copy(&cc, piece); err != nil { + expectedBytes := int64(pieceSize) + if _, err := io.CopyN(&cc, piece, expectedBytes); err != nil { return cid.Undef, err } p, _, err := cc.Digest() diff --git a/commp_test.go b/commp_test.go index 8133996..e1e7505 100644 --- a/commp_test.go +++ b/commp_test.go @@ -2,11 +2,13 @@ package commp_test import ( "bytes" + "io" "testing" "github.com/filecoin-project/go-commp-utils/v2" "github.com/filecoin-project/go-state-types/abi" "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" ) func TestZeroPadding(t *testing.T) { @@ -17,34 +19,27 @@ func TestZeroPadding(t *testing.T) { copy(data, content) pcid, err := commp.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data), psize) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) // value calculated using separate tooling expCid, err := cid.Decode("baga6ea4seaqozp3abki6vgdf7ztbipcycmxfyt2o64cpuyvdkczsjxsg7bqmioi") - if err != nil { - t.Fatal(err) - } - - if pcid != expCid { - t.Fatalf("expected %s, got %s", expCid, pcid) - } + require.NoError(t, err) + require.Equal(t, expCid, pcid) padded, err := commp.ZeroPadPieceCommitment(pcid, psize, psize*4) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) data2 := make([]byte, psize*4) copy(data2, content) padExpCid, err := commp.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data2), psize*4) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) + require.Equal(t, padded, padExpCid) +} - if padded != padExpCid { - t.Fatalf("wrong padding, expected %s, got %s", padExpCid, padded) - } +func TestMismatchedPieceSize(t *testing.T) { + psize := abi.PaddedPieceSize(128).Unpadded() + data := []byte("i am the smallest cat") // less than psize + _, err := commp.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1_1, bytes.NewReader(data), psize) + require.ErrorIs(t, err, io.EOF) } diff --git a/version.json b/version.json index 1ffac4b..5d52804 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "v2.0.0" + "version": "v2.0.1" } diff --git a/writer/writer.go b/writer/writer.go index 746c045..6c8f092 100644 --- a/writer/writer.go +++ b/writer/writer.go @@ -5,11 +5,10 @@ import ( "math/bits" "runtime" - "github.com/ipfs/go-cid" - "golang.org/x/xerrors" - "github.com/filecoin-project/go-padreader" "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" commp "github.com/filecoin-project/go-commp-utils/v2" "github.com/filecoin-project/go-commp-utils/v2/zerocomm"