Skip to content

Commit 310d986

Browse files
committed
Fixes failing tests
1 parent 7036802 commit 310d986

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

basyx.common/basyx.filerepository-backend/src/main/java/org/eclipse/digitaltwin/basyx/core/filerepository/FileRepositoryHelper.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ private FileRepositoryHelper() {
5252
/**
5353
* Retrieves repository content and materializes it as a temporary local file.
5454
* <p>
55-
* The repository id is never used as a filesystem path. The caller owns the
56-
* returned temporary file and is responsible for deleting it when it is no
57-
* longer needed.
55+
* The repository id is never used as a filesystem path. A conservative file
56+
* extension is preserved for compatibility with callers that inspect the
57+
* returned file name. The caller owns the returned temporary file and is
58+
* responsible for deleting it when it is no longer needed.
5859
*
5960
* @param fileRepository
6061
* the file repository instance
@@ -68,7 +69,7 @@ public static File fetchAndStoreFileLocally(FileRepository fileRepository, Strin
6869
Path temporaryFile = null;
6970

7071
try (InputStream fileIs = fileRepository.find(filePath)) {
71-
temporaryFile = Files.createTempFile("basyx-file-", ".tmp");
72+
temporaryFile = Files.createTempFile("basyx-file-", getSafeTempFileSuffix(filePath));
7273
Files.copy(fileIs, temporaryFile, StandardCopyOption.REPLACE_EXISTING);
7374
return temporaryFile.toFile();
7475
} catch (IOException e) {
@@ -211,6 +212,9 @@ private static String createUniqueFileName(String logicalFileName) {
211212
}
212213

213214
private static String getFileExtension(String fileName) {
215+
if (fileName == null)
216+
return "";
217+
214218
int extensionStart = fileName.lastIndexOf('.');
215219

216220
if (extensionStart <= 0 || extensionStart >= fileName.length() - 1)
@@ -224,6 +228,15 @@ private static String getFileExtension(String fileName) {
224228
return "." + extension;
225229
}
226230

231+
private static String getSafeTempFileSuffix(String filePath) {
232+
String extension = getFileExtension(filePath);
233+
234+
if (extension.isEmpty())
235+
return ".tmp";
236+
237+
return extension;
238+
}
239+
227240
private static boolean isAsciiLetterOrDigit(int character) {
228241
return character >= 'a' && character <= 'z' || character >= 'A' && character <= 'Z' || character >= '0' && character <= '9';
229242
}

basyx.common/basyx.filerepository-backend/src/test/java/org/eclipse/digitaltwin/basyx/core/filerepository/FileRepositoryHelperTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ public void fetchAndStoreFileLocallyDoesNotUseRepositoryKeyAsFilesystemPath() th
115115
java.io.File localFile = FileRepositoryHelper.fetchAndStoreFileLocally(fileRepository, maliciousRepositoryKey);
116116

117117
assertTrue(localFile.exists());
118+
assertTrue(localFile.getName().endsWith(".txt"));
118119
assertNotEquals(victimFile.toAbsolutePath().toString(), localFile.toPath().toAbsolutePath().toString());
119120
assertFalse(Files.exists(victimFile));
120121
assertArrayEquals(attackerPayload, Files.readAllBytes(localFile.toPath()));

0 commit comments

Comments
 (0)