Skip to content

Commit 3e24f62

Browse files
committed
review changes
1 parent aac160e commit 3e24f62

File tree

2 files changed

+25
-23
lines changed

2 files changed

+25
-23
lines changed

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/XMLUtils.java

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -179,16 +179,10 @@ public static SAXTransformerFactory newSecureSAXTransformerFactory()
179179
*/
180180
private static void setOptionalSecureTransformerAttributes(
181181
TransformerFactory transformerFactory) {
182-
if (CAN_SET_TRANSFORMER_ACCESS_EXTERNAL_DTD.get()) {
183-
if (!bestEffortSetAttribute(transformerFactory, XMLConstants.ACCESS_EXTERNAL_DTD, "")) {
184-
CAN_SET_TRANSFORMER_ACCESS_EXTERNAL_DTD.set(false);
185-
}
186-
}
187-
if (CAN_SET_TRANSFORMER_ACCESS_EXTERNAL_STYLESHEET.get()) {
188-
if (!bestEffortSetAttribute(transformerFactory, XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "")) {
189-
CAN_SET_TRANSFORMER_ACCESS_EXTERNAL_STYLESHEET.set(false);
190-
}
191-
}
182+
bestEffortSetAttribute(transformerFactory, CAN_SET_TRANSFORMER_ACCESS_EXTERNAL_DTD,
183+
XMLConstants.ACCESS_EXTERNAL_DTD, "");
184+
bestEffortSetAttribute(transformerFactory, CAN_SET_TRANSFORMER_ACCESS_EXTERNAL_STYLESHEET,
185+
XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
192186
}
193187

194188
/**
@@ -197,18 +191,19 @@ private static void setOptionalSecureTransformerAttributes(
197191
* logs the issue at debug level.
198192
*
199193
* @param transformerFactory to update
194+
* @param flag that indicates whether to do the update and the flag can be set to false if an update fails
200195
* @param name of the attribute to set
201196
* @param value to set on the attribute
202-
* @return whether the attribute was successfully set
203197
*/
204-
static boolean bestEffortSetAttribute(TransformerFactory transformerFactory,
205-
String name, Object value) {
206-
try {
207-
transformerFactory.setAttribute(name, value);
208-
return true;
209-
} catch (Throwable t) {
210-
LOG.debug("Issue setting TransformerFactory attribute {}: {}", name, t.toString());
198+
static void bestEffortSetAttribute(TransformerFactory transformerFactory, AtomicBoolean flag,
199+
String name, Object value) {
200+
if (flag.get()) {
201+
try {
202+
transformerFactory.setAttribute(name, value);
203+
} catch (Throwable t) {
204+
flag.set(false);
205+
LOG.debug("Issue setting TransformerFactory attribute {}: {}", name, t.toString());
206+
}
211207
}
212-
return false;
213208
}
214209
}

hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestXMLUtils.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.InputStream;
2121
import java.io.StringReader;
2222
import java.io.StringWriter;
23+
import java.util.concurrent.atomic.AtomicBoolean;
2324
import javax.xml.XMLConstants;
2425
import javax.xml.parsers.DocumentBuilder;
2526
import javax.xml.parsers.SAXParser;
@@ -134,10 +135,16 @@ public void testExternalDtdWithSecureSAXTransformerFactory() throws Exception {
134135
@Test
135136
public void testBestEffortSetAttribute() throws Exception {
136137
TransformerFactory factory = TransformerFactory.newInstance();
137-
Assert.assertFalse("unexpected attribute results in return of false",
138-
XMLUtils.bestEffortSetAttribute(factory, "unsupportedAttribute false", "abc"));
139-
Assert.assertTrue("expected attribute results in return of false",
140-
XMLUtils.bestEffortSetAttribute(factory, XMLConstants.ACCESS_EXTERNAL_DTD, ""));
138+
AtomicBoolean flag1 = new AtomicBoolean(true);
139+
XMLUtils.bestEffortSetAttribute(factory, flag1, "unsupportedAttribute false", "abc");
140+
Assert.assertFalse("unexpected attribute results in return of false?", flag1.get());
141+
AtomicBoolean flag2 = new AtomicBoolean(true);
142+
XMLUtils.bestEffortSetAttribute(factory, flag2, XMLConstants.ACCESS_EXTERNAL_DTD, "");
143+
Assert.assertTrue("expected attribute results in return of true?", flag2.get());
144+
AtomicBoolean flag3 = new AtomicBoolean(false);
145+
XMLUtils.bestEffortSetAttribute(factory, flag3, XMLConstants.ACCESS_EXTERNAL_DTD, "");
146+
Assert.assertFalse("expected attribute results in return of false if input flag is false?",
147+
flag3.get());
141148
}
142149

143150
private static InputStream getResourceStream(final String filename) {

0 commit comments

Comments
 (0)