You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by co...@apache.org on 2012/05/04 16:59:47 UTC
svn commit: r1334007 - in /santuario/xml-security-java/trunk/src:
main/java/org/apache/jcp/xml/dsig/internal/
main/java/org/apache/jcp/xml/dsig/internal/dom/
main/java/org/apache/xml/security/algorithms/
main/java/org/apache/xml/security/c14n/implement...
Author: coheigea
Date: Fri May 4 14:59:46 2012
New Revision: 1334007
URL: http://svn.apache.org/viewvc?rev=1334007&view=rev
Log:
Fixed threadlocal problems by removing some and making sure that others are properly remove'd when the outputstream is closed
Modified:
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/DigesterOutputStream.java
santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/Reference.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/XMLSignature.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncBufferedOutputStream.java
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncByteArrayOutputStream.java
santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/DigesterOutputStream.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/DigesterOutputStream.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/DigesterOutputStream.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/DigesterOutputStream.java Fri May 4 14:59:46 2012
@@ -25,6 +25,7 @@
package org.apache.jcp.xml.dsig.internal;
import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.MessageDigest;
@@ -112,4 +113,11 @@ public class DigesterOutputStream extend
return null;
}
}
+
+ @Override
+ public void close() throws IOException {
+ if (buffer) {
+ bos.close();
+ }
+ }
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/jcp/xml/dsig/internal/dom/DOMReference.java Fri May 4 14:59:46 2012
@@ -446,22 +446,19 @@ public final class DOMReference extends
} else {
dos = new DigesterOutputStream(md);
}
- OutputStream os = new UnsyncBufferedOutputStream(dos);
+ OutputStream os = null;
Data data = dereferencedData;
- for (int i = 0, size = transforms.size(); i < size; i++) {
- DOMTransform transform = (DOMTransform)transforms.get(i);
- try {
+ try {
+ os = new UnsyncBufferedOutputStream(dos);
+ for (int i = 0, size = transforms.size(); i < size; i++) {
+ DOMTransform transform = (DOMTransform)transforms.get(i);
if (i < size - 1) {
data = transform.transform(data, context);
} else {
data = transform.transform(data, context, os);
}
- } catch (TransformException te) {
- throw new XMLSignatureException(te);
}
- }
- try {
if (data != null) {
XMLSignatureInput xi;
// explicitly use C14N 1.1 when generating signature
@@ -550,6 +547,21 @@ public final class DOMReference extends
throw new XMLSignatureException(e);
} catch (org.apache.xml.security.c14n.CanonicalizationException e) {
throw new XMLSignatureException(e);
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException e) {
+ throw new XMLSignatureException(e);
+ }
+ }
+ if (dos != null) {
+ try {
+ dos.close();
+ } catch (IOException e) {
+ throw new XMLSignatureException(e);
+ }
+ }
}
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/algorithms/MessageDigestAlgorithm.java Fri May 4 14:59:46 2012
@@ -20,8 +20,6 @@ package org.apache.xml.security.algorith
import java.security.MessageDigest;
import java.security.NoSuchProviderException;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.xml.security.signature.XMLSignatureException;
import org.apache.xml.security.utils.Constants;
@@ -58,14 +56,6 @@ public class MessageDigestAlgorithm exte
/** Field algorithm stores the actual {@link java.security.MessageDigest} */
private final MessageDigest algorithm;
- private static ThreadLocal<Map<String, MessageDigest>> instances =
- new ThreadLocal<Map<String, MessageDigest>>() {
-
- protected Map<String, MessageDigest> initialValue() {
- return new HashMap<String, MessageDigest>();
- };
- };
-
/**
* Constructor for the brave who pass their own message digest algorithms and the
* corresponding URI.
@@ -94,11 +84,6 @@ public class MessageDigestAlgorithm exte
}
private static MessageDigest getDigestInstance(String algorithmURI) throws XMLSignatureException {
- Map<String, MessageDigest> digestMap = instances.get();
- MessageDigest result = digestMap.get(algorithmURI);
- if (result != null) {
- return result;
- }
String algorithmID = JCEMapper.translateURItoJCEID(algorithmURI);
if (algorithmID == null) {
@@ -123,7 +108,6 @@ public class MessageDigestAlgorithm exte
throw new XMLSignatureException("algorithms.NoSuchAlgorithm", exArgs);
}
- digestMap.put(algorithmURI, md);
return md;
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java Fri May 4 14:59:46 2012
@@ -94,13 +94,13 @@ public abstract class CanonicalizerBase
private List<NodeFilter> nodeFilter;
private boolean includeComments;
- private Set<Node> xpathNodeSet = null;
+ private Set<Node> xpathNodeSet;
/**
* The node to be skipped/excluded from the DOM tree
* in subtree canonicalizations.
*/
- private Node excludeNode =null;
- private OutputStream writer = new UnsyncByteArrayOutputStream();
+ private Node excludeNode;
+ private OutputStream writer = new ByteArrayOutputStream();
/**
* Constructor CanonicalizerBase
@@ -184,9 +184,9 @@ public abstract class CanonicalizerBase
* Canonicalizes a Subtree node.
*
* @param rootNode
- * the root of the subtree to canicalize
+ * the root of the subtree to canonicalize
* @param excludeNode
- * a node to be excluded from the canicalize operation
+ * a node to be excluded from the canonicalize operation
* @return The canonicalize stream.
* @throws CanonicalizationException
*/
@@ -202,19 +202,25 @@ public abstract class CanonicalizerBase
nodeLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
}
this.canonicalizeSubTree(rootNode, ns, rootNode, nodeLevel);
- this.writer.close();
+ this.writer.flush();
if (this.writer instanceof ByteArrayOutputStream) {
byte[] result = ((ByteArrayOutputStream)this.writer).toByteArray();
if (reset) {
((ByteArrayOutputStream)this.writer).reset();
+ } else {
+ this.writer.close();
}
return result;
} else if (this.writer instanceof UnsyncByteArrayOutputStream) {
byte[] result = ((UnsyncByteArrayOutputStream)this.writer).toByteArray();
if (reset) {
((UnsyncByteArrayOutputStream)this.writer).reset();
+ } else {
+ this.writer.close();
}
return result;
+ } else {
+ this.writer.close();
}
return null;
@@ -346,19 +352,25 @@ public abstract class CanonicalizerBase
throws CanonicalizationException {
try {
this.canonicalizeXPathNodeSet(doc, doc);
- this.writer.close();
+ this.writer.flush();
if (this.writer instanceof ByteArrayOutputStream) {
byte[] sol = ((ByteArrayOutputStream)this.writer).toByteArray();
if (reset) {
((ByteArrayOutputStream)this.writer).reset();
+ } else {
+ this.writer.close();
}
return sol;
} else if (this.writer instanceof UnsyncByteArrayOutputStream) {
byte[] result = ((UnsyncByteArrayOutputStream)this.writer).toByteArray();
if (reset) {
((UnsyncByteArrayOutputStream)this.writer).reset();
+ } else {
+ this.writer.close();
}
return result;
+ } else {
+ this.writer.close();
}
return null;
} catch (UnsupportedEncodingException ex) {
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/Reference.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/Reference.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/Reference.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/Reference.java Fri May 4 14:59:46 2012
@@ -679,12 +679,13 @@ public class Reference extends Signature
*/
private byte[] calculateDigest(boolean validating)
throws ReferenceNotInitializedException, XMLSignatureException {
+ OutputStream os = null;
try {
MessageDigestAlgorithm mda = this.getMessageDigestAlgorithm();
mda.reset();
DigesterOutputStream diOs = new DigesterOutputStream(mda);
- OutputStream os = new UnsyncBufferedOutputStream(diOs);
+ os = new UnsyncBufferedOutputStream(diOs);
XMLSignatureInput output = this.dereferenceURIandPerformTransforms(os);
// if signing and c14n11 property == true explicitly add
// C14N11 transform if needed
@@ -709,6 +710,14 @@ public class Reference extends Signature
throw new ReferenceNotInitializedException("empty", ex);
} catch (IOException ex) {
throw new ReferenceNotInitializedException("empty", ex);
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException ex) {
+ throw new ReferenceNotInitializedException("empty", ex);
+ }
+ }
}
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/XMLSignature.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/XMLSignature.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/XMLSignature.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/signature/XMLSignature.java Fri May 4 14:59:46 2012
@@ -585,25 +585,29 @@ public final class XMLSignature extends
try {
//Create a SignatureAlgorithm object
SignedInfo si = this.getSignedInfo();
- SignatureAlgorithm sa = si.getSignatureAlgorithm();
+ SignatureAlgorithm sa = si.getSignatureAlgorithm();
+ OutputStream so = null;
try {
// initialize SignatureAlgorithm for signing
sa.initSign(signingKey);
// generate digest values for all References in this SignedInfo
si.generateDigestValues();
- OutputStream so = new UnsyncBufferedOutputStream(new SignerOutputStream(sa));
+ so = new UnsyncBufferedOutputStream(new SignerOutputStream(sa));
// get the canonicalized bytes from SignedInfo
si.signInOctetStream(so);
-
- so.close();
- } catch (IOException ex) {
- if (log.isDebugEnabled()) {
- log.debug(ex);
- }
- // Impossible...
} catch (XMLSecurityException ex) {
throw ex;
+ } finally {
+ if (so != null) {
+ try {
+ so.close();
+ } catch (IOException ex) {
+ if (log.isDebugEnabled()) {
+ log.debug(ex);
+ }
+ }
+ }
}
// set them on the SignatureValue element
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncBufferedOutputStream.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncBufferedOutputStream.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncBufferedOutputStream.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncBufferedOutputStream.java Fri May 4 14:59:46 2012
@@ -93,7 +93,8 @@ public class UnsyncBufferedOutputStream
/** @inheritDoc */
public void close() throws IOException {
- flush();
+ flush();
+ bufCache.remove();
}
}
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncByteArrayOutputStream.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncByteArrayOutputStream.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncByteArrayOutputStream.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/UnsyncByteArrayOutputStream.java Fri May 4 14:59:46 2012
@@ -18,6 +18,7 @@
*/
package org.apache.xml.security.utils;
+import java.io.IOException;
import java.io.OutputStream;
/**
@@ -77,12 +78,18 @@ public class UnsyncByteArrayOutputStream
public void reset() {
pos = 0;
+ bufCache.remove();
+ }
+
+ @Override
+ public void close() throws IOException {
+ bufCache.remove();
}
private void expandSize(int newPos) {
int newSize = size;
while (newPos > newSize) {
- newSize = newSize<<2;
+ newSize = newSize << 2;
}
byte newBuf[] = new byte[newSize];
System.arraycopy(buf, 0, newBuf, 0, pos);
Modified: santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java?rev=1334007&r1=1334006&r2=1334007&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java Fri May 4 14:59:46 2012
@@ -172,7 +172,7 @@ public class DetachedTest extends org.ju
signature = fac.unmarshalXMLSignature(vc);
coreValidity = signature.validate(vc);
assertTrue("Core validity of unmarshalled XMLSignature is false", coreValidity);
- } catch(Exception ex) {
+ } catch (Exception ex) {
fail("Exception: " + ex);
}
}