Proper derivation of the visible path and invisible root when downloading folders

java-i2p-warning
Zlatin Balevsky 2022-08-31 19:00:03 +01:00
parent 4eb4dc6a6e
commit dfce7845a1
No known key found for this signature in database
GPG Key ID: A72832072D525E41
1 changed files with 11 additions and 7 deletions

View File

@ -305,17 +305,21 @@ class PersisterFolderService extends BasePersisterService {
* Generates a path with explicit shared parent
* @param file that is being shared
* @param explicitParent explicit parent
* @return a Path from parent to file
* @return a Path including invisible root suitable for insertion into trees
*/
private Path explicitSharedParent(File file, File explicitParent) {
File parent = file.getParentFile()
if (parent == explicitParent)
return Path.of(saltHash)
Path toParent = explicitParent.toPath().relativize(parent.toPath())
String invisibleRoot
File parentOfParent = explicitParent.getParentFile()
if (parentOfParent == null)
invisibleRoot = saltHash
else {
invisibleRoot = cachedRoots.computeIfAbsent(parentOfParent.toPath(), {mac(it)})
}
File parent = file.getParentFile()
Path toParent = explicitParent.getCanonicalFile().toPath().relativize(parent.getCanonicalFile().toPath())
Path visible = Path.of(explicitParent.getName(), toParent.toString())
Path invisible = explicitParent.getParentFile().toPath()
String invisibleRoot = cachedRoots.computeIfAbsent(invisible,{mac(it)})
return Path.of(invisibleRoot, visible.toString())
}