@cryptotaxi247 / kubo / commits / 7915d2609

coreapi unixfs: fix Get seeking in gateway

License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>

Łukasz Magiera committed Oct 10, 2018 at 13:47 UTC 7915d26090a91024795cabf09a8e121cbf73ca4a
2 files changed +13 -7
core/commands/cat.go
+4
@@ -147,6 +147,10 @@ func cat(ctx context.Context, api iface.CoreAPI, paths []string, offset int64, m
147 return nil, 0, err
148 }
149
150 + if f.IsDirectory() {
151 + return nil, 0, iface.ErrIsDir
152 + }
153 +
154 file := f.(catFile)
155
156 fsize, err := file.Size()
core/corehttp/gateway_handler.go
+9 -7
@@ -179,11 +179,13 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
179 }
180
181 dr, err := i.api.Unixfs().Get(ctx, resolvedPath)
182 - dir := dr.IsDirectory()
183 - switch err {
184 - case nil:
185 - // Cat() worked
186 - defer dr.Close()
182 + dir := false
183 + switch {
184 + case err == nil:
185 + dir = dr.IsDirectory()
186 + if !dir {
187 + defer dr.Close()
188 + }
189 default:
190 webError(w, "ipfs cat "+escapedURLPath, err, http.StatusNotFound)
191 return
@@ -370,7 +372,7 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
372 }
373
374 type sizeReadSeeker interface {
373 - Size() uint64
375 + Size() (int64, error)
376
377 io.ReadSeeker
378 }
@@ -381,7 +383,7 @@ type sizeSeeker struct {
383
384 func (s *sizeSeeker) Seek(offset int64, whence int) (int64, error) {
385 if whence == io.SeekEnd && offset == 0 {
384 - return int64(s.Size()), nil
386 + return s.Size()
387 }
388
389 return s.sizeReadSeeker.Seek(offset, whence)