Skip to content

Commit 2900d34

Browse files
committed
TRUNK-6188: Add whitelisting for components loaded via XStream
1 parent 9425663 commit 2900d34

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

api-common/src/main/java/org/openmrs/module/metadatasharing/serializer/MetadataSerializer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
*/
1414
package org.openmrs.module.metadatasharing.serializer;
1515

16+
import java.lang.reflect.Method;
17+
1618
import org.apache.commons.logging.Log;
1719
import org.apache.commons.logging.LogFactory;
1820
import org.openmrs.BaseOpenmrsObject;
@@ -39,6 +41,7 @@
3941
import org.openmrs.module.metadatasharing.subscription.SubscriptionHeader;
4042
import org.openmrs.serialization.OpenmrsSerializer;
4143
import org.openmrs.serialization.SerializationException;
44+
import org.openmrs.serialization.SimpleXStreamSerializer;
4245
import org.openmrs.util.OpenmrsClassLoader;
4346
import org.openmrs.util.OpenmrsConstants;
4447
import org.springframework.beans.factory.annotation.Autowired;
@@ -178,6 +181,19 @@ protected MapperWrapper wrapMapper(MapperWrapper next) {
178181
xstream.setMode(XStream.ID_REFERENCES);
179182
xstream.processAnnotations(new Class[] { SubscriptionHeader.class, Item.class });
180183

184+
setupXStreamSecurity(xstream);
181185
}
182186

187+
private void setupXStreamSecurity(XStream xstream) {
188+
SimpleXStreamSerializer serializer = Context.getRegisteredComponent("simpleXStreamSerializer", SimpleXStreamSerializer.class);
189+
if (serializer != null) {
190+
try {
191+
Method method = serializer.getClass().getMethod("initXStream", XStream.class);
192+
method.invoke(serializer, xstream);
193+
}
194+
catch (Exception ex) {
195+
log.error("Failed to set up XStream Security", ex);
196+
}
197+
}
198+
}
183199
}

omod/src/main/resources/config.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@
9090
Key to grant access to remote systems to consume module webservices RESTfully
9191
</description>
9292
</globalProperty>
93+
<globalProperty>
94+
<property>@MODULE_ID@.serializer.whitelist.types</property>
95+
<defaultValue>org.openmrs.module.metadatasharing.ImportConfig</defaultValue>
96+
<description>Add whitelisting for components loaded via XStream TRUNK-6188</description>
97+
</globalProperty>
9398
<!-- /Required Global Properties -->
9499

95100
<!-- Internationalization -->

0 commit comments

Comments
 (0)