CAMEL-6723: Fixed Message history - Possible ArrayIndexOutOfBoundsException
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bb6b2917 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bb6b2917 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bb6b2917 Branch: refs/heads/camel-2.12.x Commit: bb6b2917503c7501933be8dd271ae8e9f82e98fa Parents: 3f9984b Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Sep 18 13:09:11 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Sep 18 13:41:10 2013 +0200 ---------------------------------------------------------------------- .../src/main/java/org/apache/camel/impl/DefaultExchange.java | 8 +++++--- .../src/main/java/org/apache/camel/util/ExchangeHelper.java | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/bb6b2917/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java index 2c4a615..164ae67 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java @@ -102,13 +102,15 @@ public final class DefaultExchange implements Exchange { return null; } + Map<String, Object> answer = new ConcurrentHashMap<String, Object>(properties); + // safe copy message history using a defensive copy - List<MessageHistory> history = (List<MessageHistory>) properties.remove(Exchange.MESSAGE_HISTORY); + List<MessageHistory> history = (List<MessageHistory>) answer.remove(Exchange.MESSAGE_HISTORY); if (history != null) { - properties.put(Exchange.MESSAGE_HISTORY, new ArrayList<MessageHistory>(history)); + answer.put(Exchange.MESSAGE_HISTORY, new ArrayList<MessageHistory>(history)); } - return new ConcurrentHashMap<String, Object>(properties); + return answer; } public CamelContext getContext() { http://git-wip-us.apache.org/repos/asf/camel/blob/bb6b2917/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java b/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java index bc9943d..905ddda 100644 --- a/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java +++ b/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java @@ -822,12 +822,14 @@ public final class ExchangeHelper { return null; } + Map<String, Object> answer = new ConcurrentHashMap<String, Object>(properties); + // safe copy message history using a defensive copy - List<MessageHistory> history = (List<MessageHistory>) properties.remove(Exchange.MESSAGE_HISTORY); + List<MessageHistory> history = (List<MessageHistory>) answer.remove(Exchange.MESSAGE_HISTORY); if (history != null) { - properties.put(Exchange.MESSAGE_HISTORY, new ArrayList<MessageHistory>(history)); + answer.put(Exchange.MESSAGE_HISTORY, new ArrayList<MessageHistory>(history)); } - return new ConcurrentHashMap<String, Object>(properties); + return answer; } }