diff --git a/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java b/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java index 99689afb3b61f17f34bdbeee98806240c1b5caa5..e24c298807018d9b11689c5ab51dd0d617c0fe5c 100644 --- a/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java +++ b/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java @@ -265,7 +265,7 @@ public class FileChooseCreateEditController extends BasicController{ VFSContainer vfsRoot = new NamedContainerImpl(getTranslator().translate(NLS_FOLDER_DISPLAYNAME), rootContainer); VFSItemFilter typeFilter = null; if (!allFileSuffixesAllowed && allowedFileSuffixes != null) { - typeFilter = new VFSItemFileTypeFilter(allowedFileSuffixes); + typeFilter = new VFSItemFileTypeFilter(allowedFileSuffixes, false); } // Clanup old file chooser and open up new one removeAsListenerAndDispose(fileChooserCtr); diff --git a/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java b/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java index 4a2980e052ffdc59ad7eb9a080768d98afd2c89f..0b0650c3e4d6d7473c305243936d5feebcc921a7 100644 --- a/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java +++ b/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java @@ -130,7 +130,7 @@ public class FileLinkChooserController extends BasicController { VFSItemFilter customFilter = null; VFSItemFilter dirFilter = new VFSItemExcludePrefixFilter(dirFilters); if (suffixes != null) { - VFSItemFileTypeFilter typeFilter = new VFSItemFileTypeFilter(suffixes); + VFSItemFileTypeFilter typeFilter = new VFSItemFileTypeFilter(suffixes, uriValidation); typeFilter.setCompositeFilter(dirFilter); customFilter = typeFilter; } else { diff --git a/src/main/java/org/olat/core/util/vfs/filters/VFSItemFileTypeFilter.java b/src/main/java/org/olat/core/util/vfs/filters/VFSItemFileTypeFilter.java index 796ce7156cf52933af8e43870506811de220b1bd..74c6c47867a6a203d7c2fbd8e918a93bf80d5ec3 100644 --- a/src/main/java/org/olat/core/util/vfs/filters/VFSItemFileTypeFilter.java +++ b/src/main/java/org/olat/core/util/vfs/filters/VFSItemFileTypeFilter.java @@ -20,7 +20,9 @@ package org.olat.core.util.vfs.filters; +import java.net.URI; import java.util.Hashtable; +import java.util.Map; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; @@ -33,14 +35,17 @@ import org.olat.core.util.vfs.VFSItem; * */ public class VFSItemFileTypeFilter extends VFSItemCompositeFilter { - private Hashtable<String, String> fileTypes = new Hashtable<String, String>(); + + private final boolean uriValidation; + private Map<String, String> fileTypes = new Hashtable<String, String>(); /** * Constrtuctor * * @param filetypes */ - public VFSItemFileTypeFilter(String[] fileTypes) { + public VFSItemFileTypeFilter(String[] fileTypes, boolean uriValidation) { + this.uriValidation = uriValidation; for (int i = 0; i < fileTypes.length; i++) { addFileType(fileTypes[i]); } @@ -51,24 +56,35 @@ public class VFSItemFileTypeFilter extends VFSItemCompositeFilter { */ public void addFileType(String fileType) { fileType = fileType.toLowerCase(); - this.fileTypes.put(fileType, fileType); + fileTypes.put(fileType, fileType); } /** * @param fileType */ public void removeFileType(String fileType) { - this.fileTypes.remove(fileType.toLowerCase()); + fileTypes.remove(fileType.toLowerCase()); } /** * @see org.olat.core.util.vfs.filters.VFSItemCompositeFilter#acceptFilter(VFSItem) */ + @Override public boolean acceptFilter(VFSItem vfsItem) { if (vfsItem instanceof VFSContainer) { return true; - } - String name = vfsItem.getName().toLowerCase(); + } + + String name = vfsItem.getName(); + if(uriValidation) { + try { + new URI(name).getPath(); + } catch(Exception e) { + return false; + } + } + + name = name.toLowerCase(); int dotPos = name.lastIndexOf("."); if (dotPos == -1) return false; return fileTypes.containsKey(name.substring(dotPos + 1));