diff --git a/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java b/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java index 65723509dc3..cb711b7236e 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java +++ b/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java @@ -170,12 +170,12 @@ public class EscapedErrors implements Errors { @Override public List getFieldErrors() { - return this.source.getFieldErrors(); + return escapeObjectErrors(this.source.getFieldErrors()); } @Override public @Nullable FieldError getFieldError() { - return this.source.getFieldError(); + return escapeObjectError(this.source.getFieldError()); } @Override diff --git a/spring-web/src/test/java/org/springframework/web/bind/EscapedErrorsTests.java b/spring-web/src/test/java/org/springframework/web/bind/EscapedErrorsTests.java index 96def23148a..1806e07c8ff 100644 --- a/spring-web/src/test/java/org/springframework/web/bind/EscapedErrorsTests.java +++ b/spring-web/src/test/java/org/springframework/web/bind/EscapedErrorsTests.java @@ -94,4 +94,25 @@ class EscapedErrorsTests { assertThat(ageError2.getCode()).as("Age error 2 code not escaped").isEqualTo("AGE_NOT_32 "); } + @Test + void noArgFieldErrorAccessorsEscapeRejectedValueAndMessage() { + TestBean tb = new TestBean(); + tb.setName(""); + + Errors errors = new EscapedErrors(new BindException(tb, "tb")); + errors.rejectValue("name", "NAME_INVALID", null, "message: "); + + FieldError fieldError = errors.getFieldError(); + assertThat(fieldError.getDefaultMessage()).as("No-arg getFieldError() message escaped") + .isEqualTo("message: <tag>"); + assertThat(fieldError.getRejectedValue()).as("No-arg getFieldError() rejected value escaped") + .isEqualTo("<script>alert(1)</script>"); + + FieldError fieldErrorInList = errors.getFieldErrors().get(0); + assertThat(fieldErrorInList.getDefaultMessage()).as("No-arg getFieldErrors() message escaped") + .isEqualTo("message: <tag>"); + assertThat(fieldErrorInList.getRejectedValue()).as("No-arg getFieldErrors() rejected value escaped") + .isEqualTo("<script>alert(1)</script>"); + } + }