diff --git a/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java b/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java index 23507cc62da..8d6afe7af80 100644 --- a/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java +++ b/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java @@ -50,7 +50,7 @@ public class CheckstyleConventions { project.getPlugins().apply(CheckstylePlugin.class); project.getTasks().withType(Checkstyle.class).forEach(checkstyle -> checkstyle.getMaxHeapSize().set("1g")); CheckstyleExtension checkstyle = project.getExtensions().getByType(CheckstyleExtension.class); - checkstyle.setToolVersion("10.14.2"); + checkstyle.setToolVersion("10.15.0"); checkstyle.getConfigDirectory().set(project.getRootProject().file("src/checkstyle")); String version = SpringJavaFormatPlugin.class.getPackage().getImplementationVersion(); DependencySet checkstyleDependencies = project.getConfigurations().getByName("checkstyle").getDependencies(); diff --git a/framework-platform/framework-platform.gradle b/framework-platform/framework-platform.gradle index ac9bfa38369..2fc23f36645 100644 --- a/framework-platform/framework-platform.gradle +++ b/framework-platform/framework-platform.gradle @@ -9,11 +9,11 @@ javaPlatform { dependencies { api(platform("com.fasterxml.jackson:jackson-bom:2.15.4")) api(platform("io.micrometer:micrometer-bom:1.12.4")) - api(platform("io.netty:netty-bom:4.1.107.Final")) + api(platform("io.netty:netty-bom:4.1.108.Final")) api(platform("io.netty:netty5-bom:5.0.0.Alpha5")) api(platform("io.projectreactor:reactor-bom:2023.0.4")) api(platform("io.rsocket:rsocket-bom:1.1.3")) - api(platform("org.apache.groovy:groovy-bom:4.0.19")) + api(platform("org.apache.groovy:groovy-bom:4.0.20")) api(platform("org.apache.logging.log4j:log4j-bom:2.21.1")) api(platform("org.assertj:assertj-bom:3.25.3")) api(platform("org.eclipse.jetty:jetty-bom:12.0.7")) @@ -25,9 +25,9 @@ dependencies { constraints { api("com.fasterxml:aalto-xml:1.3.2") - api("com.fasterxml.woodstox:woodstox-core:6.6.1") + api("com.fasterxml.woodstox:woodstox-core:6.6.2") api("com.github.ben-manes.caffeine:caffeine:3.1.8") - api("com.github.librepdf:openpdf:1.3.42") + api("com.github.librepdf:openpdf:1.3.43") api("com.google.code.findbugs:findbugs:3.0.1") api("com.google.code.findbugs:jsr305:3.0.2") api("com.google.code.gson:gson:2.10.1") @@ -102,13 +102,13 @@ dependencies { api("org.apache.httpcomponents.client5:httpclient5:5.3.1") api("org.apache.httpcomponents.core5:httpcore5-reactive:5.2.4") api("org.apache.poi:poi-ooxml:5.2.5") - api("org.apache.tomcat.embed:tomcat-embed-core:10.1.19") - api("org.apache.tomcat.embed:tomcat-embed-websocket:10.1.19") - api("org.apache.tomcat:tomcat-util:10.1.19") - api("org.apache.tomcat:tomcat-websocket:10.1.19") - api("org.aspectj:aspectjrt:1.9.21.1") - api("org.aspectj:aspectjtools:1.9.21.1") - api("org.aspectj:aspectjweaver:1.9.21.1") + api("org.apache.tomcat.embed:tomcat-embed-core:10.1.20") + api("org.apache.tomcat.embed:tomcat-embed-websocket:10.1.20") + api("org.apache.tomcat:tomcat-util:10.1.20") + api("org.apache.tomcat:tomcat-websocket:10.1.20") + api("org.aspectj:aspectjrt:1.9.22") + api("org.aspectj:aspectjtools:1.9.22") + api("org.aspectj:aspectjweaver:1.9.22") api("org.awaitility:awaitility:4.2.0") api("org.bouncycastle:bcpkix-jdk18on:1.72") api("org.codehaus.jettison:jettison:1.5.4") diff --git a/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java b/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java index 003ad085735..fb345f8f715 100644 --- a/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java +++ b/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java @@ -128,8 +128,9 @@ public abstract class CoroutinesUtils { Object arg = args[index]; if (!(parameter.isOptional() && arg == null)) { KType type = parameter.getType(); - if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass kClass - && KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) { + if (!(type.isMarkedNullable() && arg == null) && + type.getClassifier() instanceof KClass kClass && + KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) { KFunction constructor = KClasses.getPrimaryConstructor(kClass); if (!KCallablesJvm.isAccessible(constructor)) { KCallablesJvm.setAccessible(constructor, true); diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java index 886fcbe15ef..c20330f93e7 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java @@ -119,7 +119,8 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe String msg = cause.getMessage(); if (msg != null) { msg = msg.toLowerCase(); - if (msg.contains("exceed") && (msg.contains("size") || msg.contains("length"))) { + if ((msg.contains("exceed") && (msg.contains("size") || msg.contains("length"))) || + (msg.contains("request") && (msg.contains("big") || msg.contains("large")))) { throw new MaxUploadSizeExceededException(-1, ex); } } diff --git a/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java b/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java index 4a3b2613bd8..dfdadda286e 100644 --- a/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java +++ b/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java @@ -123,6 +123,14 @@ class StandardMultipartHttpServletRequestTests { .isThrownBy(() -> requestWithException(ex)).withCause(ex); } + @Test // gh-32549 + void undertowRequestTooBigException() { + IOException ex = new IOException("Connection terminated as request was larger than 10000"); + + assertThatExceptionOfType(MaxUploadSizeExceededException.class) + .isThrownBy(() -> requestWithException(ex)).withCause(ex); + } + private static StandardMultipartHttpServletRequest requestWithPart(String name, String disposition, String content) { MockHttpServletRequest request = new MockHttpServletRequest(); @@ -142,4 +150,14 @@ class StandardMultipartHttpServletRequestTests { return new StandardMultipartHttpServletRequest(request); } + private static StandardMultipartHttpServletRequest requestWithException(IOException ex) { + MockHttpServletRequest request = new MockHttpServletRequest() { + @Override + public Collection getParts() throws IOException { + throw ex; + } + }; + return new StandardMultipartHttpServletRequest(request); + } + }