Skip to content

Commit 778e187

Browse files
author
Jannick Weisshaupt
committed
Fix corrupted saml2 metadata when special characters are present
Closes gh-13776
1 parent 779541b commit 778e187

File tree

2 files changed

+3
-1
lines changed

2 files changed

+3
-1
lines changed

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/Saml2MetadataFilter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private void writeMetadataToResponse(HttpServletResponse response, String regist
104104
String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
105105
String format = "attachment; filename=\"%s\"; filename*=UTF-8''%s";
106106
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, String.format(format, fileName, encodedFileName));
107-
response.setContentLength(metadata.length());
107+
response.setContentLength(metadata.getBytes(StandardCharsets.UTF_8).length);
108108
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
109109
response.getWriter().write(metadata);
110110
}

saml2/saml2-service-provider/src/test/java/org/springframework/security/saml2/provider/service/web/Saml2MetadataFilterTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ public void doFilterWhenCharacterEncodingThenEncodeSpecialCharactersCorrectly()
166166
this.filter.doFilter(this.request, this.response, this.chain);
167167
assertThat(this.response.getCharacterEncoding()).isEqualTo(StandardCharsets.UTF_8.name());
168168
assertThat(this.response.getContentAsString(StandardCharsets.UTF_8)).isEqualTo(generatedMetadata);
169+
assertThat(this.response.getContentLength()).isEqualTo(
170+
generatedMetadata.getBytes(StandardCharsets.UTF_8).length);
169171
}
170172

171173
@Test

0 commit comments

Comments
 (0)