@cryptotaxi247 / kubo / commits / d16ae1bbf

unixfs: fix relative seek not expanding file properly

License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>

Jakub Sztandera committed Aug 17, 2016 at 19:13 UTC d16ae1bbfe6994b8c54ff66c83282f5f7dea3479
2 files changed +32 -2
unixfs/mod/dagmodifier.go
+2 -2
@@ -377,8 +377,8 @@ func (dm *DagModifier) Seek(offset int64, whence int) (int64, error) {
377 return 0, ErrUnrecognizedWhence
378 }
379
380 - if offset > fisize {
381 - if err := dm.expandSparse(offset - fisize); err != nil {
380 + if int64(newoffset) > fisize {
381 + if err := dm.expandSparse(int64(newoffset) - fisize); err != nil {
382 return 0, err
383 }
384 }
unixfs/mod/dagmodifier_test.go
+30
@@ -548,6 +548,36 @@ func TestSeekPastEndWrite(t *testing.T) {
548 }
549 }
550
551 +func TestRelativeSeek(t *testing.T) {
552 + dserv := getMockDagServ(t)
553 + _, n := getNode(t, dserv, 0)
554 + ctx, cancel := context.WithCancel(context.Background())
555 + defer cancel()
556 +
557 + dagmod, err := NewDagModifier(ctx, n, dserv, sizeSplitterGen(512))
558 + if err != nil {
559 + t.Fatal(err)
560 + }
561 +
562 + for i := 0; i < 64; i++ {
563 + dagmod.Write([]byte{byte(i)})
564 + if _, err := dagmod.Seek(1, os.SEEK_CUR); err != nil {
565 + t.Fatal(err)
566 + }
567 + }
568 +
569 + out, err := ioutil.ReadAll(dagmod)
570 + if err != nil {
571 + t.Fatal(err)
572 + }
573 +
574 + for i, v := range out {
575 + if v != 0 && i/2 != int(v) {
576 + t.Errorf("expected %d, at index %d, got %d", i/2, i, v)
577 + }
578 + }
579 +}
580 +
581 func BenchmarkDagmodWrite(b *testing.B) {
582 b.StopTimer()
583 dserv := getMockDagServ(b)