Skip to content

Commit 3f45bb9

Browse files
committed
Fix #2181
1 parent 7f94bb3 commit 3f45bb9

File tree

7 files changed

+23
-6
lines changed

7 files changed

+23
-6
lines changed

release-notes/CREDITS-2.x

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,3 +813,8 @@ Brandon Krieger (bkrieger@github)
813813
814814
Semyon Levin (remal@github)
815815
* Contributed #2120: `NioPathDeserializer` improvement
816+
(2.9.7)
817+
818+
Pavel Nikitin (morj@github)
819+
* Requested #2181: Don't re-use dynamic serializers for property-updating copy constructors
820+
(2.9.8)

release-notes/VERSION-2.x

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Project: jackson-databind
1111
#2155: Type parameters are checked for equality while isAssignableFrom expected
1212
(reported by frankfiedler@github)
1313
#2167: Large ISO-8601 Dates are formatted/serialized incorrectly
14+
#2181: Don't re-use dynamic serializers for property-updating copy constructors
15+
(suggested by Pavel N)
1416
#2183: Base64 JsonMappingException: Unexpected end-of-input
1517
(reported by ViToni@github)
1618
#2186: Block more classes from polymorphic deserialization (CVE-2018-19360,

src/main/java/com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ protected MapEntrySerializer(MapEntrySerializer src, BeanProperty property,
143143
_valueTypeSerializer = src._valueTypeSerializer;
144144
_keySerializer = (JsonSerializer<Object>) keySer;
145145
_valueSerializer = (JsonSerializer<Object>) valueSer;
146-
_dynamicValueSerializers = src._dynamicValueSerializers;
146+
// [databind#2181]: may not be safe to reuse, start from empty
147+
_dynamicValueSerializers = PropertySerializerMap.emptyForProperties();
147148
_property = src._property;
148149
_suppressableValue = suppressableValue;
149150
_suppressNulls = suppressNulls;

src/main/java/com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ protected AsArraySerializerBase(AsArraySerializerBase<?> src,
118118
_valueTypeSerializer = vts;
119119
_property = property;
120120
_elementSerializer = (JsonSerializer<Object>) elementSerializer;
121-
_dynamicSerializers = src._dynamicSerializers;
121+
// [databind#2181]: may not be safe to reuse, start from empty
122+
_dynamicSerializers = PropertySerializerMap.emptyForProperties();
122123
_unwrapSingle = unwrapSingle;
123124
}
124125

src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ protected MapSerializer(MapSerializer src, BeanProperty property,
196196
_valueTypeSerializer = src._valueTypeSerializer;
197197
_keySerializer = (JsonSerializer<Object>) keySerializer;
198198
_valueSerializer = (JsonSerializer<Object>) valueSerializer;
199-
_dynamicValueSerializers = src._dynamicValueSerializers;
199+
// [databind#2181]: may not be safe to reuse, start from empty
200+
_dynamicValueSerializers = PropertySerializerMap.emptyForProperties();
200201
_property = property;
201202
_filterId = src._filterId;
202203
_sortKeys = src._sortKeys;
@@ -218,6 +219,8 @@ protected MapSerializer(MapSerializer src, TypeSerializer vts,
218219
_valueTypeSerializer = vts;
219220
_keySerializer = src._keySerializer;
220221
_valueSerializer = src._valueSerializer;
222+
// 22-Nov-2018, tatu: probably safe (even with [databind#2181]) since it's just
223+
// inclusion, type serializer but NOT serializer
221224
_dynamicValueSerializers = src._dynamicValueSerializers;
222225
_property = src._property;
223226
_filterId = src._filterId;
@@ -236,7 +239,8 @@ protected MapSerializer(MapSerializer src, Object filterId, boolean sortKeys)
236239
_valueTypeSerializer = src._valueTypeSerializer;
237240
_keySerializer = src._keySerializer;
238241
_valueSerializer = src._valueSerializer;
239-
_dynamicValueSerializers = src._dynamicValueSerializers;
242+
// [databind#2181]: may not be safe to reuse, start from empty
243+
_dynamicValueSerializers = PropertySerializerMap.emptyForProperties();
240244
_property = src._property;
241245
_filterId = filterId;
242246
_sortKeys = sortKeys;

src/main/java/com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ public ObjectArraySerializer(ObjectArraySerializer src, TypeSerializer vts)
7575
_elementType = src._elementType;
7676
_valueTypeSerializer = vts;
7777
_staticTyping = src._staticTyping;
78+
// 22-Nov-2018, tatu: probably safe (even with [databind#2181]) since it's just
79+
// inclusion, type serializer but NOT serializer
7880
_dynamicSerializers = src._dynamicSerializers;
7981
_elementSerializer = src._elementSerializer;
8082
}
@@ -88,7 +90,8 @@ public ObjectArraySerializer(ObjectArraySerializer src,
8890
_elementType = src._elementType;
8991
_valueTypeSerializer = vts;
9092
_staticTyping = src._staticTyping;
91-
_dynamicSerializers = src._dynamicSerializers;
93+
// [databind#2181]: may not be safe to reuse, start from empty
94+
_dynamicSerializers = PropertySerializerMap.emptyForProperties();
9295
_elementSerializer = (JsonSerializer<Object>) elementSerializer;
9396
}
9497

src/main/java/com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ protected ReferenceTypeSerializer(ReferenceTypeSerializer<?> base, BeanProperty
116116
{
117117
super(base);
118118
_referredType = base._referredType;
119-
_dynamicSerializers = base._dynamicSerializers;
119+
// [databind#2181]: may not be safe to reuse, start from empty
120+
_dynamicSerializers = PropertySerializerMap.emptyForProperties();
120121
_property = property;
121122
_valueTypeSerializer = vts;
122123
_valueSerializer = (JsonSerializer<Object>) valueSer;

0 commit comments

Comments
 (0)