From 034a667e0716b7bea2bf74fbf57b72d1e6575b73 Mon Sep 17 00:00:00 2001 From: Markus Kreusch Date: Thu, 11 Aug 2016 11:19:12 +0200 Subject: [PATCH] Fixed problem with sync conflict resolver. Issue #311 --- .../crypto/engine/impl/FilenameCryptorImpl.java | 2 +- .../org/cryptomator/filesystem/crypto/CryptoFolder.java | 7 ++++--- .../filesystem/shortening/ConflictResolver.java | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/FilenameCryptorImpl.java b/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/FilenameCryptorImpl.java index 6833d1b9a..75408f609 100644 --- a/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/FilenameCryptorImpl.java +++ b/main/filesystem-crypto/src/main/java/org/cryptomator/crypto/engine/impl/FilenameCryptorImpl.java @@ -27,7 +27,7 @@ class FilenameCryptorImpl implements FilenameCryptor { private static final BaseNCodec BASE32 = new Base32(); // https://tools.ietf.org/html/rfc4648#section-6 - private static final Pattern BASE32_PATTERN = Pattern.compile("([A-Z2-7]{8})*[A-Z2-7=]{8}"); + private static final Pattern BASE32_PATTERN = Pattern.compile("^([A-Z2-7]{8})*[A-Z2-7=]{8}"); private static final ThreadLocal SHA1 = new ThreadLocalSha1(); private static final ThreadLocal AES_SIV = new ThreadLocal() { @Override diff --git a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java index b66721ca2..af9698d12 100644 --- a/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java +++ b/main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java @@ -10,6 +10,7 @@ package org.cryptomator.filesystem.crypto; import static java.lang.String.format; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.apache.commons.lang3.StringUtils.removeStart; import static org.cryptomator.filesystem.crypto.Constants.DIR_PREFIX; import java.io.FileNotFoundException; @@ -91,15 +92,15 @@ class CryptoFolder extends CryptoNode implements Folder { private Stream nonConflictingFiles() { if (exists()) { final Stream files = physicalFolder().filter(Folder::exists).map(Folder::files).orElse(Stream.empty()); - return files.filter(containsEncryptedName()).map(conflictResolver::resolveIfNecessary).distinct(); + return files.filter(startsWithEncryptedName()).map(conflictResolver::resolveIfNecessary).distinct(); } else { throw new UncheckedIOException(new FileNotFoundException(format("Folder %s does not exist", this))); } } - private Predicate containsEncryptedName() { + private Predicate startsWithEncryptedName() { final Pattern encryptedNamePattern = cryptor.getFilenameCryptor().encryptedNamePattern(); - return (File file) -> encryptedNamePattern.matcher(file.name()).find(); + return (File file) -> encryptedNamePattern.matcher(removeStart(file.name(),DIR_PREFIX)).find(); } Optional decryptChildName(String ciphertextFileName) { diff --git a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ConflictResolver.java b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ConflictResolver.java index ac8b056fe..ef5532767 100644 --- a/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ConflictResolver.java +++ b/main/filesystem-nameshortening/src/main/java/org/cryptomator/filesystem/shortening/ConflictResolver.java @@ -14,7 +14,7 @@ final class ConflictResolver { private static final Logger LOG = LoggerFactory.getLogger(ConflictResolver.class); private static final String LONG_NAME_FILE_EXT = ".lng"; - private static final Pattern BASE32_PATTERN = Pattern.compile("([A-Z0-9]{8})*[A-Z0-9=]{8}"); + private static final Pattern BASE32_PATTERN = Pattern.compile("^0?([A-Z2-7]{8})*[A-Z2-7=]{8}"); private static final int UUID_FIRST_GROUP_STRLEN = 8; private ConflictResolver() {