Skip to content

Commit 20238df

Browse files
committed
feat: add ErrInvalidCid to remaining parsing functions
1 parent 5c40574 commit 20238df

File tree

2 files changed

+48
-14
lines changed

2 files changed

+48
-14
lines changed

cid.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -456,28 +456,28 @@ func (c Cid) Equals(o Cid) bool {
456456
// UnmarshalJSON parses the JSON representation of a Cid.
457457
func (c *Cid) UnmarshalJSON(b []byte) error {
458458
if len(b) < 2 {
459-
return fmt.Errorf("invalid cid json blob")
459+
return ErrInvalidCid{fmt.Errorf("invalid cid json blob")}
460460
}
461461
obj := struct {
462462
CidTarget string `json:"/"`
463463
}{}
464464
objptr := &obj
465465
err := json.Unmarshal(b, &objptr)
466466
if err != nil {
467-
return err
467+
return ErrInvalidCid{err}
468468
}
469469
if objptr == nil {
470470
*c = Cid{}
471471
return nil
472472
}
473473

474474
if obj.CidTarget == "" {
475-
return fmt.Errorf("cid was incorrectly formatted")
475+
return ErrInvalidCid{fmt.Errorf("cid was incorrectly formatted")}
476476
}
477477

478478
out, err := Decode(obj.CidTarget)
479479
if err != nil {
480-
return err
480+
return ErrInvalidCid{err}
481481
}
482482

483483
*c = out
@@ -564,12 +564,12 @@ func (p Prefix) Sum(data []byte) (Cid, error) {
564564
if p.Version == 0 && (p.MhType != mh.SHA2_256 ||
565565
(p.MhLength != 32 && p.MhLength != -1)) {
566566

567-
return Undef, fmt.Errorf("invalid v0 prefix")
567+
return Undef, ErrInvalidCid{fmt.Errorf("invalid v0 prefix")}
568568
}
569569

570570
hash, err := mh.Sum(data, p.MhType, length)
571571
if err != nil {
572-
return Undef, err
572+
return Undef, ErrInvalidCid{err}
573573
}
574574

575575
switch p.Version {
@@ -578,7 +578,7 @@ func (p Prefix) Sum(data []byte) (Cid, error) {
578578
case 1:
579579
return NewCidV1(p.Codec, hash), nil
580580
default:
581-
return Undef, fmt.Errorf("invalid cid version")
581+
return Undef, ErrInvalidCid{fmt.Errorf("invalid cid version")}
582582
}
583583
}
584584

@@ -608,22 +608,22 @@ func PrefixFromBytes(buf []byte) (Prefix, error) {
608608
r := bytes.NewReader(buf)
609609
vers, err := varint.ReadUvarint(r)
610610
if err != nil {
611-
return Prefix{}, err
611+
return Prefix{}, ErrInvalidCid{err}
612612
}
613613

614614
codec, err := varint.ReadUvarint(r)
615615
if err != nil {
616-
return Prefix{}, err
616+
return Prefix{}, ErrInvalidCid{err}
617617
}
618618

619619
mhtype, err := varint.ReadUvarint(r)
620620
if err != nil {
621-
return Prefix{}, err
621+
return Prefix{}, ErrInvalidCid{err}
622622
}
623623

624624
mhlen, err := varint.ReadUvarint(r)
625625
if err != nil {
626-
return Prefix{}, err
626+
return Prefix{}, ErrInvalidCid{err}
627627
}
628628

629629
return Prefix{

cid_test.go

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ func TestBasesMarshaling(t *testing.T) {
163163
if err == nil {
164164
t.Fatal("expected too-short error from ExtractEncoding")
165165
}
166+
if !errors.Is(err, ErrInvalidCid{}) {
167+
t.Fatal("expected error to be ErrInvalidCid")
168+
}
166169
if ee != -1 {
167170
t.Fatal("expected -1 from too-short ExtractEncoding")
168171
}
@@ -379,6 +382,9 @@ func TestInvalidV0Prefix(t *testing.T) {
379382
if err == nil {
380383
t.Fatalf("should error (index %d)", i)
381384
}
385+
if !errors.Is(err, ErrInvalidCid{}) {
386+
t.Fatal("expected error to be ErrInvalidCid")
387+
}
382388
}
383389
}
384390

@@ -388,6 +394,9 @@ func TestBadPrefix(t *testing.T) {
388394
if err == nil {
389395
t.Fatalf("expected error on v3 prefix Sum")
390396
}
397+
if !errors.Is(err, ErrInvalidCid{}) {
398+
t.Fatal("expected error to be ErrInvalidCid")
399+
}
391400
}
392401

393402
func TestPrefixRoundtrip(t *testing.T) {
@@ -424,18 +433,30 @@ func TestBadPrefixFromBytes(t *testing.T) {
424433
if err == nil {
425434
t.Fatal("expected error for bad byte 0")
426435
}
436+
if !errors.Is(err, ErrInvalidCid{}) {
437+
t.Fatal("expected error to be ErrInvalidCid")
438+
}
427439
_, err = PrefixFromBytes([]byte{0x01, 0x80})
428440
if err == nil {
429441
t.Fatal("expected error for bad byte 1")
430442
}
443+
if !errors.Is(err, ErrInvalidCid{}) {
444+
t.Fatal("expected error to be ErrInvalidCid")
445+
}
431446
_, err = PrefixFromBytes([]byte{0x01, 0x01, 0x80})
432447
if err == nil {
433448
t.Fatal("expected error for bad byte 2")
434449
}
450+
if !errors.Is(err, ErrInvalidCid{}) {
451+
t.Fatal("expected error to be ErrInvalidCid")
452+
}
435453
_, err = PrefixFromBytes([]byte{0x01, 0x01, 0x01, 0x80})
436454
if err == nil {
437455
t.Fatal("expected error for bad byte 3")
438456
}
457+
if !errors.Is(err, ErrInvalidCid{}) {
458+
t.Fatal("expected error to be ErrInvalidCid")
459+
}
439460
}
440461

441462
func Test16BytesVarint(t *testing.T) {
@@ -582,17 +603,29 @@ func TestJsonRoundTrip(t *testing.T) {
582603
t.Fatal("cids not equal for Cid")
583604
}
584605

585-
if err = actual2.UnmarshalJSON([]byte("1")); err == nil {
606+
err = actual2.UnmarshalJSON([]byte("1"))
607+
if err == nil {
586608
t.Fatal("expected error for too-short JSON")
587609
}
610+
if !errors.Is(err, ErrInvalidCid{}) {
611+
t.Fatal("expected error to be ErrInvalidCid")
612+
}
588613

589-
if err = actual2.UnmarshalJSON([]byte(`{"nope":"nope"}`)); err == nil {
614+
err = actual2.UnmarshalJSON([]byte(`{"nope":"nope"}`))
615+
if err == nil {
590616
t.Fatal("expected error for bad CID JSON")
591617
}
618+
if !errors.Is(err, ErrInvalidCid{}) {
619+
t.Fatal("expected error to be ErrInvalidCid")
620+
}
592621

593-
if err = actual2.UnmarshalJSON([]byte(`bad "" json!`)); err == nil {
622+
err = actual2.UnmarshalJSON([]byte(`bad "" json!`))
623+
if err == nil {
594624
t.Fatal("expected error for bad JSON")
595625
}
626+
if !errors.Is(err, ErrInvalidCid{}) {
627+
t.Fatal("expected error to be ErrInvalidCid")
628+
}
596629

597630
var actual3 Cid
598631
enc, err = actual3.MarshalJSON()
@@ -822,4 +855,5 @@ func TestErrInvalidCid(t *testing.T) {
822855
run(Parse("bafyInvalid"))
823856
run(Parse("QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zIII"))
824857
run(Parse(123))
858+
run(Prefix{}.Sum([]byte("data")))
825859
}

0 commit comments

Comments
 (0)