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)