--- a/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Wed Jul 17 00:34:39 2013 -0700
+++ b/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java Thu Jul 25 20:12:14 2013 -0400
@@ -136,21 +136,30 @@
List<Transform> transforms = new ArrayList<Transform>();
Element transformsElem = DOMUtils.getFirstChildElement(rmElem);
- int transformCount = 0;
if (transformsElem != null) {
+ String localName = transformsElem.getLocalName();
+ if (!localName.equals("Transforms")) {
+ throw new MarshalException("Invalid element name: " +
+ localName + ", expected Transforms");
+ }
Element transformElem =
- DOMUtils.getFirstChildElement(transformsElem);
+ DOMUtils.getFirstChildElement(transformsElem, "Transform");
+ transforms.add(new DOMTransform(transformElem, context, provider));
+ transformElem = DOMUtils.getNextSiblingElement(transformElem);
while (transformElem != null) {
+ String name = transformElem.getLocalName();
+ if (!name.equals("Transform")) {
+ throw new MarshalException("Invalid element name: " +
+ name + ", expected Transform");
+ }
transforms.add
(new DOMTransform(transformElem, context, provider));
- transformElem = DOMUtils.getNextSiblingElement(transformElem);
-
- transformCount++;
- if (secVal && (transformCount > DOMReference.MAXIMUM_TRANSFORM_COUNT)) {
+ if (secVal && (transforms.size() > DOMReference.MAXIMUM_TRANSFORM_COUNT)) {
String error = "A maxiumum of " + DOMReference.MAXIMUM_TRANSFORM_COUNT + " "
+ "transforms per Reference are allowed with secure validation";
throw new MarshalException(error);
}
+ transformElem = DOMUtils.getNextSiblingElement(transformElem);
}
}
if (transforms.isEmpty()) {