diff --git a/path/resolver/resolver.go b/path/resolver/resolver.go index 05341655a..2aa247645 100644 --- a/path/resolver/resolver.go +++ b/path/resolver/resolver.go @@ -69,19 +69,25 @@ func (r *Resolver) ResolveToLastNode(ctx context.Context, fpath path.Path) (ipld } for len(p) > 0 { - val, rest, err := nd.Resolve(p) + lnk, rest, err := r.ResolveOnce(ctx, r.DAG, nd, p) if err != nil { return nil, nil, err } - switch val := val.(type) { - case *ipld.Link: - next, err := val.GetNode(ctx, r.DAG) + if lnk != nil { + next, err := lnk.GetNode(ctx, r.DAG) if err != nil { return nil, nil, err } nd = next p = rest + continue + } + + val, rest, err := nd.Resolve(p) + switch val.(type) { + case *ipld.Link: + return nil, nil, errors.New("inconsistent ResolveOnce / nd.Resolve") default: return nd, p, nil }