From 2f5b78f493ce7d8961ae39f33300576646e346b0 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 26 May 2016 12:27:53 +0200
Subject: [PATCH] OO-1807: normalize invalid filename

---
 .../core/commons/modules/bc/FileUploadController.java     | 8 ++++++++
 .../modules/bc/meta/_i18n/LocalStrings_de.properties      | 1 +
 .../modules/bc/meta/_i18n/LocalStrings_en.properties      | 1 +
 src/main/java/org/olat/core/util/FileUtils.java           | 2 ++
 4 files changed, 12 insertions(+)

diff --git a/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java b/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java
index b0ea5085283..7597003e4e8 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java
@@ -302,6 +302,14 @@ public class FileUploadController extends FormBasicController {
 		if(fileEl == source) {
 			if(metaDataCtr != null) {
 				String filename = fileEl.getUploadFileName();
+				if(!FileUtils.validateFilename(filename)) {
+					String suffix = FileUtils.getFileSuffix(filename);
+					if(suffix != null && suffix.length() > 0) {
+						filename = filename.substring(0, filename.length() - suffix.length() - 1);
+					}
+					filename = FileUtils.normalizeFilename(filename) + "." + suffix;
+					metaDataCtr.getFilenameEl().setExampleKey("mf.filename.warning", null);
+				}
 				metaDataCtr.setFilename(filename);
 			}
 		}
diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_de.properties
index 11c37781314..ea72b9a004f 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_de.properties
@@ -14,6 +14,7 @@ mf.error.filename.exists=Ein Objekt mit gleichem Namen existiert bereits.
 mf.error.filename.invalidchars=Der Name des Objektes enth\u00E4lt ung\u00FCltige Zeichen.
 mf.file=Datei
 mf.filename=Dateiname
+mf.filename.warning=<i class="o_icon o_icon_warn"> </i> Dieser Dateiname enth\u00E4lt unzul\u00E4ssige Zeichen und die wurden entfernt.
 mf.header=Metadaten Datei/Ordner
 mf.language=Sprache
 mf.lastModified=Datum letzte \u00C4nderung
diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_en.properties
index 8a20a599602..aa2ac8587b1 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/modules/bc/meta/_i18n/LocalStrings_en.properties
@@ -14,6 +14,7 @@ mf.error.filename.exists=An object with that name already exists.
 mf.error.filename.invalidchars=The object's name contains invalid characters.
 mf.file=File
 mf.filename=File name
+mf.filename.warning=<i class="o_icon o_icon_warn"> </i> This file name contains invalid characters and they were removed.
 mf.header=Metadata file/folder
 mf.language=Language
 mf.lastModified=Last modified\:
diff --git a/src/main/java/org/olat/core/util/FileUtils.java b/src/main/java/org/olat/core/util/FileUtils.java
index aae8b418a19..420739154ce 100644
--- a/src/main/java/org/olat/core/util/FileUtils.java
+++ b/src/main/java/org/olat/core/util/FileUtils.java
@@ -852,6 +852,8 @@ public class FileUtils {
 		return nameSanitized;
 	}
 	
+	
+	
 	/**
 	 * Creates a new directory in the specified directory, using the given prefix and suffix strings to generate its name.
 	 * It uses File.createTempFile() and should provide a unique name.
-- 
GitLab