Skip to content

Commit c88eb0e

Browse files
committed
TRUNK-6188: Add whitelisting for components loaded via XStream
1 parent 6db57c4 commit c88eb0e

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

api/src/main/java/org/openmrs/module/reporting/serializer/ReportingSerializer.java

+36
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,42 @@ public Object unmarshal(HierarchicalStreamReader reader, Object root) {
8585
xstream.registerConverter(new IndicatorConverter(mapper, converterLookup));
8686

8787
xstream.registerConverter(new ReportDefinitionConverter(mapper, converterLookup));
88+
89+
setupXStreamSecurity(xstream);
90+
}
91+
92+
private void setupXStreamSecurity(XStream xstream) throws SerializationException {
93+
94+
if (!isPlatformTwoPointSevenOrAbove()) {
95+
return;
96+
}
97+
98+
99+
try {
100+
SimpleXStreamSerializer serializer = Context.getRegisteredComponent("simpleXStreamSerializer", SimpleXStreamSerializer.class);
101+
if (serializer != null) {
102+
try {
103+
Method method = serializer.getClass().getMethod("initXStream", XStream.class);
104+
method.invoke(serializer, xstream);
105+
}
106+
catch (Exception ex) {
107+
throw new SerializationException("Failed to set up XStream Security", ex);
108+
}
109+
}
110+
}
111+
catch (APIException ex) {
112+
//Ignore APIException("Error during getting registered component) for platform versions below 2.7.0
113+
}
114+
}
115+
116+
private boolean isPlatformTwoPointSevenOrAbove() {
117+
try {
118+
Class.forName("org.openmrs.ConceptReferenceRange");
119+
return true;
120+
}
121+
catch (ClassNotFoundException exception) {
122+
return false;
123+
}
88124
}
89125

90126
@Override

0 commit comments

Comments
 (0)