From 1c54e4f4adb92e1da64d17e1feb2fcb8cae4f209 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 12 May 2016 16:13:03 +0200 Subject: [PATCH] in the unlikely event of an alternative name already being used, choose a new random conflict id. --- .../filesystem/crypto/ConflictResolver.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/ConflictResolver.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/ConflictResolver.java index bfcd8660f..38f321b28 100644 --- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/ConflictResolver.java +++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/ConflictResolver.java @@ -52,11 +52,15 @@ final class ConflictResolver { Folder folder = conflictingFile.parent().get(); File canonicalFile = folder.file(isDirectory ? ciphertext + DIR_SUFFIX : ciphertext); if (canonicalFile.exists()) { - // CONFLICT!!!!!11 - String conflictId = createConflictId(); - String alternativeCleartext = cleartext + " (Conflict " + conflictId + ")"; - String alternativeCiphertext = nameEncryptor.apply(alternativeCleartext); - File alternativeFile = folder.file(isDirectory ? alternativeCiphertext + DIR_SUFFIX : alternativeCiphertext); + // conflict detected! look for an alternative name: + File alternativeFile; + String conflictId; + do { + conflictId = createConflictId(); + String alternativeCleartext = cleartext + " (Conflict " + conflictId + ")"; + String alternativeCiphertext = nameEncryptor.apply(alternativeCleartext); + alternativeFile = folder.file(isDirectory ? alternativeCiphertext + DIR_SUFFIX : alternativeCiphertext); + } while (alternativeFile.exists()); LOG.info("Detected conflict {}:\n{}\n{}", conflictId, canonicalFile, conflictingFile); conflictingFile.moveTo(alternativeFile); return alternativeFile;