diff --git a/changelog/unreleased/prevent-panic.md b/changelog/unreleased/prevent-panic.md new file mode 100644 index 00000000000..710d55d613b --- /dev/null +++ b/changelog/unreleased/prevent-panic.md @@ -0,0 +1,5 @@ +Bugfix: prevent a panic when logging an error + +We fixed a panic when constructing a path failed to get the parent for a node. + +https://github.com/cs3org/reva/pull/4954 diff --git a/pkg/storage/utils/decomposedfs/lookup/lookup.go b/pkg/storage/utils/decomposedfs/lookup/lookup.go index fc95764aaf9..94add713006 100644 --- a/pkg/storage/utils/decomposedfs/lookup/lookup.go +++ b/pkg/storage/utils/decomposedfs/lookup/lookup.go @@ -27,17 +27,18 @@ import ( user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/google/uuid" + "github.com/pkg/errors" + "github.com/rogpeppe/go-internal/lockedfile" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" + "github.com/cs3org/reva/v2/pkg/appctx" "github.com/cs3org/reva/v2/pkg/errtypes" "github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/metadata" "github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/metadata/prefixes" "github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node" "github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/options" - "github.com/google/uuid" - "github.com/pkg/errors" - "github.com/rogpeppe/go-internal/lockedfile" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/trace" ) var tracer trace.Tracer @@ -235,14 +236,17 @@ func (lu *Lookup) GenerateSpaceID(spaceType string, owner *user.User) (string, e // Path returns the path for node func (lu *Lookup) Path(ctx context.Context, n *node.Node, hasPermission node.PermissionFunc) (p string, err error) { root := n.SpaceRoot + var child *node.Node for n.ID != root.ID { p = filepath.Join(n.Name, p) + child = n if n, err = n.Parent(ctx); err != nil { appctx.GetLogger(ctx). Error().Err(err). Str("path", p). - Str("spaceid", n.SpaceID). - Str("nodeid", n.ID). + Str("spaceid", child.SpaceID). + Str("nodeid", child.ID). + Str("parentid", child.ParentID). Msg("Path()") return }