I have done a little more debugging and I think the offender is Reference.normalize(). FileClientHelper calls this to normalize file:///foo/./ to file:///foo.
This is fine, but DirectoryResource has fields "targetUri" and "directoryUri" which are NOT normalized. If we can normalize these things, then the rootLength calculated in DirectoryResource.getVariants() will be the length of "file:///foo" instead of "file:///foo/./", and the substring length that we remove from the results to get the file name will be correct.

