A cleaner fix here is to ensure that the root path passed to filepath.Walk and/or filepath.WalkDir ends with a trailing separator, which (on all POSIX-compliant platforms, and Windows as of https://go.dev/cl/463177) will cause Walk to start walking at the target referred to by the root instead of the root symlink itself.
The code added in https://github.com/containerd/continuity/commit/8100e750d9eddde6410d2b8aa00fd0fbd1ada652 (CC @darstahl) appears to be assuming a behavior of
os.Readlink
that it does not actually provide, which will almost certainly causeWalk
to fail when the root is a relative symlink or symlink-to-symlink on POSIX platforms.A cleaner fix here is to ensure that the root path passed to
filepath.Walk
and/orfilepath.WalkDir
ends with a trailing separator, which (on all POSIX-compliant platforms, and Windows as of https://go.dev/cl/463177) will causeWalk
to start walking at the target referred to by the root instead of the root symlink itself.