From 1f8e9f5c55b963bda86ba2c6f561ec910f1a9174 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 14 Mar 2023 12:35:14 +0100 Subject: [PATCH] Support Windows path in ContentDisposition::parse This commit makes sure that ContentDisposition::parse supports Windows path with a backslash. Closes gh-30111 --- .../java/org/springframework/http/ContentDisposition.java | 6 +++++- .../org/springframework/http/ContentDispositionTests.java | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java index c725123e29..8516e898e9 100644 --- a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java +++ b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java @@ -624,7 +624,11 @@ public final class ContentDisposition { char c = filename.charAt(i); if (filename.charAt(i) == '\\' && i + 1 < length) { i++; - sb.append(filename.charAt(i)); + char next = filename.charAt(i); + if (next != '"' && next != '\\') { + sb.append(c); + } + sb.append(next); } else { sb.append(c); diff --git a/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java b/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java index ca2a7cb0aa..ac4a831543 100644 --- a/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java +++ b/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java @@ -169,6 +169,14 @@ class ContentDispositionTests { assertThat(cd.toString()).isEqualTo("form-data; name=\"foo\"; filename=\"bar\\\\\""); } + @Test + void parseWindowsPath() { + ContentDisposition cd = ContentDisposition.parse("form-data; name=\"foo\"; filename=\"D:\\foo\\bar.txt\""); + assertThat(cd.getName()).isEqualTo("foo"); + assertThat(cd.getFilename()).isEqualTo("D:\\foo\\bar.txt"); + assertThat(cd.toString()).isEqualTo("form-data; name=\"foo\"; filename=\"D:\\\\foo\\\\bar.txt\""); + } + @SuppressWarnings("deprecation") @Test