Skip to content

Commit af23325

Browse files
committed
fix utf-8 decoding of dataset/file names
1 parent a9ea9bf commit af23325

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/api/Datasets.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3095,7 +3095,7 @@ public Response addFileToDataset(@Context ContainerRequestContext crc,
30953095
* under the hood in Jersey here. So this should be considered a practical rather than final fix.
30963096
*/
30973097

3098-
newFilename = contentDispositionHeader.getFileName();
3098+
newFilename = FileUtil.decodeFileName(contentDispositionHeader.getFileName());
30993099
// Let's see if the form data part has the mime (content) type specified.
31003100
// Note that we don't want to rely on formDataBodyPart.getMediaType() -
31013101
// because that defaults to "text/plain" when no "Content-Type:" header is

src/main/java/edu/harvard/iq/dataverse/api/Files.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ public Response replaceFileInDataset(
286286
"You must upload a file or provide a valid storageidentifier, filename, and mimetype.");
287287
}
288288
} else {
289-
newFilename = contentDispositionHeader.getFileName();
289+
newFilename = FileUtil.decodeFileName(contentDispositionHeader.getFileName());
290290
newFileContentType = formDataBodyPart.getMediaType().toString();
291291
}
292292

src/test/java/edu/harvard/iq/dataverse/util/FileUtilTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,4 +436,12 @@ public void testSanitizeFileName() {
436436
assertEquals("withcomma", FileUtil.sanitizeFileName("with,comma"));
437437
assertEquals("with.txt", FileUtil.sanitizeFileName("with,\\?:;,.txt"));
438438
}
439+
440+
@Test
441+
public void testDecodeFileName() {
442+
// "test-á.txt" encoded as UTF-8 but interpreted as ISO-8859-1
443+
String mangledName = "test-á.txt";
444+
assertEquals("test-á.txt", FileUtil.decodeFileName(mangledName));
445+
assertEquals(null, FileUtil.decodeFileName(null));
446+
}
439447
}

0 commit comments

Comments
 (0)