diff --git a/api/src/org/labkey/api/pipeline/PipelineJob.java b/api/src/org/labkey/api/pipeline/PipelineJob.java index 055699b030f..18e595703a3 100644 --- a/api/src/org/labkey/api/pipeline/PipelineJob.java +++ b/api/src/org/labkey/api/pipeline/PipelineJob.java @@ -473,16 +473,17 @@ public Path getRemoteLogPath() /** Finds a file name that hasn't been used yet, appending ".2", ".3", etc as needed */ public static File findUniqueLogFile(File primaryFile, String baseName) { + String validBaseName = FileUtil.makeLegalName(baseName); // need to look in current and archived dirs for any unused log file names (issue 20987) - File fileLog = FT_LOG.newFile(primaryFile.getParentFile(), baseName); + File fileLog = FT_LOG.newFile(primaryFile.getParentFile(), validBaseName); File archivedDir = new File(primaryFile.getParentFile(), AssayFileWriter.ARCHIVED_DIR_NAME); - File fileLogArchived = FT_LOG.newFile(archivedDir, baseName); + File fileLogArchived = FT_LOG.newFile(archivedDir, validBaseName); int index = 1; while (NetworkDrive.exists(fileLog) || NetworkDrive.exists(fileLogArchived)) { - fileLog = FT_LOG.newFile(primaryFile.getParentFile(), baseName + "." + (index)); - fileLogArchived = FT_LOG.newFile(archivedDir, baseName + "." + (index++)); + fileLog = FT_LOG.newFile(primaryFile.getParentFile(), validBaseName + "." + (index)); + fileLogArchived = FT_LOG.newFile(archivedDir, validBaseName + "." + (index++)); } return fileLog; diff --git a/api/src/org/labkey/api/util/FileType.java b/api/src/org/labkey/api/util/FileType.java index 80d274fa6f7..680795aafaa 100644 --- a/api/src/org/labkey/api/util/FileType.java +++ b/api/src/org/labkey/api/util/FileType.java @@ -243,7 +243,9 @@ public FileType(List suffixes, String defaultSuffix, boolean dir, gzSupp private String tryName(Path parentDir, String name) { if (_supportGZ.booleanValue()) // TPP treats xml.gz as a native format - { // in the case of existing files, non-gz copy wins if present + { + FileUtil.legalPathPartThrow(name); + // in the case of existing files, non-gz copy wins if present Path f = parentDir!=null ? FileUtil.appendName(parentDir, name) : Path.of(name); if (!NetworkDrive.exists(f)) { // non-gz copy doesn't exist - how about .gz version? @@ -340,7 +342,7 @@ public String getName(Path parentDir, String basename) for (String suffix : _suffixes) { String name = tryName(parentDir, basename + suffix); - Path f = parentDir.resolve(name); + Path f = FileUtil.appendName(parentDir, name); if (NetworkDrive.exists(f)) { // avoid, for example, mistaking protxml ".pep-prot.xml" for pepxml ".xml" file @@ -372,7 +374,7 @@ public File getFile(File parentDir, String basename) public Path getPath(Path parentDir, String basename) { - return parentDir.resolve(getName(parentDir, basename)); + return FileUtil.appendName(parentDir, getName(parentDir, basename)); } /** diff --git a/api/src/org/labkey/api/util/FileUtil.java b/api/src/org/labkey/api/util/FileUtil.java index a2ac2bc5b68..e56a9b50827 100644 --- a/api/src/org/labkey/api/util/FileUtil.java +++ b/api/src/org/labkey/api/util/FileUtil.java @@ -890,7 +890,7 @@ public static Path appendName(Path dir, String name) // narrower check than isLegalName() or isAllowedFileName() // this check that a name is a valid path part (e.g. filename) and is not path like. - private static void legalPathPartThrow(String name) + public static void legalPathPartThrow(String name) { int invalidCharacterIndex = StringUtils.indexOfAny(name, '/', File.separatorChar); if (invalidCharacterIndex >= 0)