diff --git a/test/sharness/t0090-get.sh b/test/sharness/t0090-get.sh index a4ab590b3..98e8d92b3 100755 --- a/test/sharness/t0090-get.sh +++ b/test/sharness/t0090-get.sh @@ -104,6 +104,14 @@ test_get_cmd() { rm -r "$HASH2" ' + # Test issue #4720: problems when path contains a trailing slash. + test_expect_success "ipfs get with slash (directory)" ' + ipfs get "$HASH2/" && + test_cmp dir/a "$HASH2"/a && + test_cmp dir/b/c "$HASH2"/b/c && + rm -r "$HASH2" + ' + test_expect_success "ipfs get -a -C succeeds (directory)" ' ipfs get "$HASH2" -a -C >actual ' diff --git a/unixfs/archive/archive.go b/unixfs/archive/archive.go index 7a561992e..4aecb186f 100644 --- a/unixfs/archive/archive.go +++ b/unixfs/archive/archive.go @@ -33,7 +33,8 @@ func (i *identityWriteCloser) Close() error { // DagArchive is equivalent to `ipfs getdag $hash | maybe_tar | maybe_gzip` func DagArchive(ctx context.Context, nd ipld.Node, name string, dag ipld.DAGService, archive bool, compression int) (io.Reader, error) { - _, filename := path.Split(name) + cleaned := path.Clean(name) + _, filename := path.Split(cleaned) // need to connect a writer to a reader piper, pipew := io.Pipe()