MessageHeaderAccessor handle self-copy correctly

1. Revert changes in setHeader from 5.2.9 that caused regression on self-copy.
2. Update copyHeaders to ensure it still gets a copy of native headers.
3. Exit if source and target are the same instance, as an optimization.

Closes gh-26155
This commit is contained in:
Rossen Stoyanchev
2020-11-26 16:14:39 +00:00
parent 42216b77df
commit d46091565b
3 changed files with 63 additions and 35 deletions

View File

@@ -241,4 +241,14 @@ public class NativeMessageHeaderAccessorTests {
assertThat(((NativeMessageHeaderAccessor) accessor).getNativeHeader("foo")).containsExactly("bar", "baz");
}
@Test // gh-26155
void copySelf() {
NativeMessageHeaderAccessor accessor = new NativeMessageHeaderAccessor();
accessor.addNativeHeader("foo", "bar");
accessor.setHeader("otherHeader", "otherHeaderValue");
accessor.setLeaveMutable(true);
// Does not fail with ConcurrentModificationException
accessor.copyHeaders(accessor.getMessageHeaders());
}
}