Skip to content

Commit 6e8b862

Browse files
pkumaraswamycoffeys
authored andcommitted
8255559: Leak File Descriptors Because of ResolverLocalFilesystem#engineResolveURI()
Reviewed-by: weijun
1 parent 129ff97 commit 6e8b862

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -500,38 +500,44 @@ private byte[] transform(Data dereferencedData,
500500
}
501501

502502
boolean secVal = Utils.secureValidation(context);
503-
xi.setSecureValidation(secVal);
504-
if (context instanceof XMLSignContext && c14n11
505-
&& !xi.isOctetStream() && !xi.isOutputStreamSet()) {
506-
TransformService spi = null;
507-
if (provider == null) {
508-
spi = TransformService.getInstance(c14nalg, "DOM");
509-
} else {
510-
try {
511-
spi = TransformService.getInstance(c14nalg, "DOM", provider);
512-
} catch (NoSuchAlgorithmException nsae) {
503+
try {
504+
xi.setSecureValidation(secVal);
505+
if (context instanceof XMLSignContext && c14n11
506+
&& !xi.isOctetStream() && !xi.isOutputStreamSet()) {
507+
TransformService spi = null;
508+
if (provider == null) {
513509
spi = TransformService.getInstance(c14nalg, "DOM");
510+
} else {
511+
try {
512+
spi = TransformService.getInstance(c14nalg, "DOM", provider);
513+
} catch (NoSuchAlgorithmException nsae) {
514+
spi = TransformService.getInstance(c14nalg, "DOM");
515+
}
514516
}
515-
}
516517

517-
DOMTransform t = new DOMTransform(spi);
518-
Element transformsElem = null;
519-
String dsPrefix = DOMUtils.getSignaturePrefix(context);
520-
if (allTransforms.isEmpty()) {
521-
transformsElem = DOMUtils.createElement(
522-
refElem.getOwnerDocument(),
523-
"Transforms", XMLSignature.XMLNS, dsPrefix);
524-
refElem.insertBefore(transformsElem,
525-
DOMUtils.getFirstChildElement(refElem));
518+
DOMTransform t = new DOMTransform(spi);
519+
Element transformsElem = null;
520+
String dsPrefix = DOMUtils.getSignaturePrefix(context);
521+
if (allTransforms.isEmpty()) {
522+
transformsElem = DOMUtils.createElement(
523+
refElem.getOwnerDocument(),
524+
"Transforms", XMLSignature.XMLNS, dsPrefix);
525+
refElem.insertBefore(transformsElem,
526+
DOMUtils.getFirstChildElement(refElem));
527+
} else {
528+
transformsElem = DOMUtils.getFirstChildElement(refElem);
529+
}
530+
t.marshal(transformsElem, dsPrefix,
531+
(DOMCryptoContext) context);
532+
allTransforms.add(t);
533+
xi.updateOutputStream(os, true);
526534
} else {
527-
transformsElem = DOMUtils.getFirstChildElement(refElem);
535+
xi.updateOutputStream(os);
536+
}
537+
} finally {
538+
if(xi.getOctetStreamReal() != null) {
539+
xi.getOctetStreamReal().close();
528540
}
529-
t.marshal(transformsElem, dsPrefix,
530-
(DOMCryptoContext)context);
531-
allTransforms.add(t);
532-
xi.updateOutputStream(os, true);
533-
} else {
534-
xi.updateOutputStream(os);
535541
}
536542
}
537543
os.flush();

0 commit comments

Comments
 (0)