From a9fda3e7e2d55bd0659b1142f895f9b5d6802062 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 4 Jun 2016 00:17:20 +0200 Subject: [PATCH] Defensive catching of any Throwable subclasses instead of just Error Issue: SPR-14329 --- .../messaging/support/AbstractMessageChannel.java | 2 +- .../messaging/support/ExecutorSubscribableChannel.java | 2 +- .../transaction/support/TransactionTemplate.java | 4 ++-- .../springframework/web/portlet/DispatcherPortlet.java | 10 +++++----- .../springframework/web/servlet/DispatcherServlet.java | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java b/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java index c215646e925..37825c7674b 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java @@ -126,7 +126,7 @@ public abstract class AbstractMessageChannel implements MessageChannel, Intercep } throw new MessageDeliveryException(message,"Failed to send message to " + this, ex); } - catch (Error err) { + catch (Throwable err) { MessageDeliveryException ex2 = new MessageDeliveryException(message, "Failed to send message to " + this, err); chain.triggerAfterSendCompletion(message, this, sent, ex2); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java b/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java index 611cdf06098..45acbbf03fc 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java @@ -143,7 +143,7 @@ public class ExecutorSubscribableChannel extends AbstractSubscribableChannel { String description = "Failed to handle " + message + " to " + this + " in " + this.messageHandler; throw new MessageDeliveryException(message, description, ex); } - catch (Error err) { + catch (Throwable err) { String description = "Failed to handle " + message + " to " + this + " in " + this.messageHandler; MessageDeliveryException ex2 = new MessageDeliveryException(message, description, err); triggerAfterMessageHandled(message, ex2); diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/TransactionTemplate.java b/spring-tx/src/main/java/org/springframework/transaction/support/TransactionTemplate.java index 7515148694d..b2fd8ce0196 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/TransactionTemplate.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/TransactionTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -142,7 +142,7 @@ public class TransactionTemplate extends DefaultTransactionDefinition rollbackOnException(status, err); throw err; } - catch (Exception ex) { + catch (Throwable ex) { // Transactional code threw unexpected exception -> rollback rollbackOnException(status, ex); throw new UndeclaredThrowableException(ex, "TransactionCallback threw undeclared checked exception"); diff --git a/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java b/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java index 9c5add7fc6d..35300634eca 100644 --- a/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java +++ b/spring-webmvc-portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -687,7 +687,7 @@ public class DispatcherPortlet extends FrameworkPortlet { throw ex; } } - catch (Error err) { + catch (Throwable err) { PortletException ex = new PortletException("Error occured during request processing: " + err.getMessage(), err); // Trigger after-completion for thrown exception. @@ -800,7 +800,7 @@ public class DispatcherPortlet extends FrameworkPortlet { triggerAfterRenderCompletion(mappedHandler, interceptorIndex, request, response, ex); throw ex; } - catch (Error err) { + catch (Throwable err) { PortletException ex = new PortletException("Error occured during request processing: " + err.getMessage(), err); // Trigger after-completion for thrown exception. @@ -891,7 +891,7 @@ public class DispatcherPortlet extends FrameworkPortlet { triggerAfterResourceCompletion(mappedHandler, interceptorIndex, request, response, ex); throw ex; } - catch (Error err) { + catch (Throwable err) { PortletException ex = new PortletException("Error occured during request processing: " + err.getMessage(), err); // Trigger after-completion for thrown exception. @@ -965,7 +965,7 @@ public class DispatcherPortlet extends FrameworkPortlet { throw ex; } } - catch (Error err) { + catch (Throwable err) { PortletException ex = new PortletException("Error occured during request processing: " + err.getMessage(), err); // Trigger after-completion for thrown exception. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java index 5155fd9f3bd..e18f57e26d5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java @@ -972,7 +972,7 @@ public class DispatcherServlet extends FrameworkServlet { catch (Exception ex) { dispatchException = ex; } - catch (Error err) { + catch (Throwable err) { // As of 4.3, we're processing Errors thrown from handler methods as well, // making them available for @ExceptionHandler methods and other scenarios. dispatchException = new NestedServletException("Handler dispatch failed", err); @@ -982,7 +982,7 @@ public class DispatcherServlet extends FrameworkServlet { catch (Exception ex) { triggerAfterCompletion(processedRequest, response, mappedHandler, ex); } - catch (Error err) { + catch (Throwable err) { triggerAfterCompletion(processedRequest, response, mappedHandler, new NestedServletException("Handler processing failed", err)); }