From 9fc332eef9733ad1d857ea2b470b260b271fd3ca Mon Sep 17 00:00:00 2001 From: masensio Date: Tue, 2 Jun 2015 09:37:46 +0200 Subject: [PATCH] Filter only '/' character in user input when version of server is 8.1 or later --- .../android/lib/common/OwnCloudClient.java | 11 +++++++ .../files/CreateRemoteFolderOperation.java | 4 +-- .../lib/resources/files/FileUtils.java | 32 ++++++++++++------- .../files/MoveRemoteFileOperation.java | 3 +- .../files/RenameRemoteFileOperation.java | 3 +- .../lib/resources/status/OwnCloudVersion.java | 6 ++++ 6 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/com/owncloud/android/lib/common/OwnCloudClient.java b/src/com/owncloud/android/lib/common/OwnCloudClient.java index b6804708..83ec07ad 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudClient.java +++ b/src/com/owncloud/android/lib/common/OwnCloudClient.java @@ -51,6 +51,7 @@ import com.owncloud.android.lib.common.OwnCloudCredentialsFactory.OwnCloudAnonym import com.owncloud.android.lib.common.accounts.AccountUtils; import com.owncloud.android.lib.common.network.WebdavUtils; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.status.OwnCloudVersion; public class OwnCloudClient extends HttpClient { @@ -67,6 +68,8 @@ public class OwnCloudClient extends HttpClient { private int mInstanceNumber = 0; private Uri mBaseUri; + + private OwnCloudVersion mVersion = null; /** * Constructor @@ -436,4 +439,12 @@ public class OwnCloudClient extends HttpClient { } + public void setOwnCloudVersion(String version){ + OwnCloudVersion ver = new OwnCloudVersion(version); + mVersion = ver; + } + + public OwnCloudVersion getOwnCloudVersion(){ + return mVersion; + } } diff --git a/src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java b/src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java index 0d248e6f..0bfbb453 100644 --- a/src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java +++ b/src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java @@ -24,7 +24,6 @@ package com.owncloud.android.lib.resources.files; -import org.apache.commons.httpclient.HttpStatus; import org.apache.jackrabbit.webdav.client.methods.MkColMethod; import com.owncloud.android.lib.common.OwnCloudClient; @@ -73,7 +72,8 @@ public class CreateRemoteFolderOperation extends RemoteOperation { @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; - boolean noInvalidChars = FileUtils.isValidPath(mRemotePath); + boolean noInvalidChars = FileUtils.isValidPath(mRemotePath, + client.getOwnCloudVersion().isVersionWithForbiddenCharacters()); if (noInvalidChars) { result = createFolder(client); if (!result.isSuccess() && mCreateFullPath && diff --git a/src/com/owncloud/android/lib/resources/files/FileUtils.java b/src/com/owncloud/android/lib/resources/files/FileUtils.java index a6fd29f6..e04e3bbf 100644 --- a/src/com/owncloud/android/lib/resources/files/FileUtils.java +++ b/src/com/owncloud/android/lib/resources/files/FileUtils.java @@ -27,9 +27,12 @@ package com.owncloud.android.lib.resources.files; import java.io.File; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.status.OwnCloudVersion; public class FileUtils { + private static final String TAG = FileUtils.class.getSimpleName(); + public static final String PATH_SEPARATOR = "/"; @@ -40,39 +43,44 @@ public class FileUtils { } /** - * Validate the fileName to detect if contains any forbidden character: / , \ , < , > , : , " , | , ? , * + * Validate the fileName to detect if contains any forbidden character: / , \ , < , > , + * : , " , | , ? , * * @param fileName + * @param versionSupportsForbiddenChars * @return */ - public static boolean isValidName(String fileName) { + public static boolean isValidName(String fileName, boolean versionSupportsForbiddenChars) { boolean result = true; - Log_OC.d("FileUtils", "fileName =======" + fileName); - if (fileName.contains(PATH_SEPARATOR) || + Log_OC.d(TAG, "fileName =======" + fileName); + if ( (versionSupportsForbiddenChars && fileName.contains(PATH_SEPARATOR)) || + (!versionSupportsForbiddenChars && ( fileName.contains(PATH_SEPARATOR) || fileName.contains("\\") || fileName.contains("<") || fileName.contains(">") || - fileName.contains(":") || fileName.contains("\"") || fileName.contains("|") || - fileName.contains("?") || fileName.contains("*")) { + fileName.contains(":") || fileName.contains("\"") || fileName.contains("|") || + fileName.contains("?") || fileName.contains("*") ) ) ) { + result = false; } return result; } /** - * Validate the path to detect if contains any forbidden character: \ , < , > , : , " , | , ? , * + * Validate the path to detect if contains any forbidden character: \ , < , > , : , " , | , + * ? , * * @param path * @return */ - public static boolean isValidPath(String path) { + public static boolean isValidPath(String path, boolean versionSupportsForbidenChars) { boolean result = true; - Log_OC.d("FileUtils", "path ....... " + path); - if (path.contains("\\") || path.contains("<") || path.contains(">") || + Log_OC.d(TAG, "path ....... " + path); + if (!versionSupportsForbidenChars && + (path.contains("\\") || path.contains("<") || path.contains(">") || path.contains(":") || path.contains("\"") || path.contains("|") || - path.contains("?") || path.contains("*")) { + path.contains("?") || path.contains("*") ) ){ result = false; } return result; } - } diff --git a/src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java index 1eb88765..f1535eb1 100644 --- a/src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java @@ -89,7 +89,8 @@ public class MoveRemoteFileOperation extends RemoteOperation { protected RemoteOperationResult run(OwnCloudClient client) { /// check parameters - if (!FileUtils.isValidPath(mTargetRemotePath)) { + if (!FileUtils.isValidPath(mTargetRemotePath, + client.getOwnCloudVersion().isVersionWithForbiddenCharacters())) { return new RemoteOperationResult(ResultCode.INVALID_CHARACTER_IN_NAME); } diff --git a/src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java index 4dc4c2c2..fa928b7c 100644 --- a/src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java @@ -89,7 +89,8 @@ public class RenameRemoteFileOperation extends RemoteOperation { LocalMoveMethod move = null; - boolean noInvalidChars = FileUtils.isValidPath(mNewRemotePath); + boolean noInvalidChars = FileUtils.isValidPath(mNewRemotePath, + client.getOwnCloudVersion().isVersionWithForbiddenCharacters()); if (noInvalidChars) { try { diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java index eb56f2d2..aa89cf3d 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -38,6 +38,8 @@ public class OwnCloudVersion implements Comparable { 0x04050000); public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B00; // 5.0.27 + + public static final int MINIMUM_VERSION_WITH_FORBIDDEN_CHARS = 0x08010000; // 8.1 private static final int MAX_DOTS = 3; @@ -120,6 +122,10 @@ public class OwnCloudVersion implements Comparable { public boolean isSharedSupported() { return (mVersion >= MINIMUM_VERSION_FOR_SHARING_API); } + + public boolean isVersionWithForbiddenCharacters() { + return (mVersion >= MINIMUM_VERSION_WITH_FORBIDDEN_CHARS); + } }