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)