From a58bd458f72f471cebee9be6530e33c972358312 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 12 Jan 2023 15:53:25 +0100 Subject: [PATCH] Fixes #24412 --- .../application/geoportal/common/utils/Files.java | 8 ++++---- .../application/geoportal/common/FilesTests.java | 14 +++++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java index 94c8826..7916f4f 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java @@ -92,12 +92,12 @@ public class Files { if(toFix.startsWith("\\.")) toFix=toFix.replaceFirst("\\.","_"); String extension=""; - if(toFix.contains(".")) { + int extensionIndex=toFix.lastIndexOf("."); + if(extensionIndex>0) { //preserve extension - int index=toFix.indexOf("."); - extension=toFix.substring(index); + extension=toFix.substring(extensionIndex); //only escape before extension - toFix=toFix.substring(0,toFix.indexOf(".")); + toFix=toFix.substring(0,extensionIndex); } return toFix.toLowerCase(). replaceAll("[\\-\\*\\+\\/\\\\ \\[\\]\\(\\)\\.\\\"\\:\\;\\|\\=]","_")+extension.toLowerCase(); diff --git a/geoportal-common/src/test/java/org/gcube/application/geoportal/common/FilesTests.java b/geoportal-common/src/test/java/org/gcube/application/geoportal/common/FilesTests.java index 2317dd3..0ec8885 100644 --- a/geoportal-common/src/test/java/org/gcube/application/geoportal/common/FilesTests.java +++ b/geoportal-common/src/test/java/org/gcube/application/geoportal/common/FilesTests.java @@ -6,6 +6,8 @@ import org.junit.Test; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -18,12 +20,18 @@ public class FilesTests { @Test public void testNames(){ - for(String name : baseFolder.list()){ + + ArrayList toTestStrings=new ArrayList<>(Arrays.asList(baseFolder.list())); + toTestStrings.add("e. gna_topografia_timponedellamotta.qmd"); + + for(String name : toTestStrings){ if(name.contains(".")) { - String originalExtension = name.substring(name.indexOf(".")); + int extensionIndex = name.lastIndexOf("."); + String originalExtension = extensionIndex>0?name.substring(extensionIndex):null; String obtained = Files.fixFilename(name); log.info(name + "->" + obtained + "[" + originalExtension + "]"); - assertTrue(obtained.endsWith(originalExtension)); + if(originalExtension!=null) + assertTrue(obtained.endsWith(originalExtension)); } } }