You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by gi...@apache.org on 2012/07/17 21:26:07 UTC

svn commit: r1362616 - in /santuario/xml-security-java/trunk/src: main/java/org/apache/xml/security/stax/impl/processor/input/ main/java/org/apache/xml/security/stax/impl/stax/ main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/ test...

Author: giger
Date: Tue Jul 17 19:26:06 2012
New Revision: 1362616

URL: http://svn.apache.org/viewvc?rev=1362616&view=rev
Log:
Fix for SANTUARIO-328

Added:
    santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml   (with props)
    santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml   (with props)
Modified:
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/processor/input/AbstractDecryptInputProcessor.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecStartElementImpl.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/CanonicalizerBase.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/c14n/Canonicalizer20010315Test.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/RSASecurityTest.java

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/processor/input/AbstractDecryptInputProcessor.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/processor/input/AbstractDecryptInputProcessor.java?rev=1362616&r1=1362615&r2=1362616&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/processor/input/AbstractDecryptInputProcessor.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/processor/input/AbstractDecryptInputProcessor.java Tue Jul 17 19:26:06 2012
@@ -305,7 +305,8 @@ public abstract class AbstractDecryptInp
         List<XMLSecNamespace> comparableNamespacesToApply = new ArrayList<XMLSecNamespace>();
         List<XMLSecNamespace> comparableNamespaceList = new ArrayList<XMLSecNamespace>();
         xmlSecStartElement.getNamespacesFromCurrentScope(comparableNamespaceList);
-        for (int i = 0; i < comparableNamespaceList.size(); i++) {
+        //reverse iteration -> From current element namespaces to parent namespaces
+        for (int i = comparableNamespaceList.size() - 1; i >= 0; i--) {
             XMLSecNamespace comparableNamespace = comparableNamespaceList.get(i);
             if (!comparableNamespacesToApply.contains(comparableNamespace)) {
                 comparableNamespacesToApply.add(comparableNamespace);

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecStartElementImpl.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecStartElementImpl.java?rev=1362616&r1=1362615&r2=1362616&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecStartElementImpl.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecStartElementImpl.java Tue Jul 17 19:26:06 2012
@@ -120,10 +120,10 @@ public class XMLSecStartElementImpl exte
 
     @Override
     public void getNamespacesFromCurrentScope(List<XMLSecNamespace> comparableNamespaceList) {
-        comparableNamespaceList.addAll(namespaces);
         if (parentXMLSecStartELement != null) {
             parentXMLSecStartELement.getNamespacesFromCurrentScope(comparableNamespaceList);
         }
+        comparableNamespaceList.addAll(namespaces);
     }
 
     @Override

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/CanonicalizerBase.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/CanonicalizerBase.java?rev=1362616&r1=1362615&r2=1362616&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/CanonicalizerBase.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/CanonicalizerBase.java Tue Jul 17 19:26:06 2012
@@ -192,11 +192,18 @@ public abstract class CanonicalizerBase 
 
             final XMLSecNamespace found = (XMLSecNamespace) outputStack.containsOnStack(comparableNamespace);
             //found means the prefix matched. so check the ns further
-            if (found != null && found.getNamespaceURI() != null && found.getNamespaceURI().equals(comparableNamespace.getNamespaceURI())) {
-                continue;
+            if (found != null) {
+                //ns redefinition so remove the old one:
+                //remove(comparableNamespace) works because we have overwritten the hash and equals method and just test
+                //for prefix equality
+                utilizedNamespaces.remove(comparableNamespace);
             }
-            utilizedNamespaces.add(comparableNamespace);
             outputStack.peek().add(comparableNamespace);
+
+            //don't add xmlns="" declarations:
+            if (!comparableNamespace.getNamespaceURI().isEmpty() || !comparableNamespace.getPrefix().isEmpty()) {
+                utilizedNamespaces.add(comparableNamespace);
+            }
         }
 
         return utilizedNamespaces;

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/c14n/Canonicalizer20010315Test.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/c14n/Canonicalizer20010315Test.java?rev=1362616&r1=1362615&r2=1362616&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/c14n/Canonicalizer20010315Test.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/c14n/Canonicalizer20010315Test.java Tue Jul 17 19:26:06 2012
@@ -362,6 +362,48 @@ public class Canonicalizer20010315Test e
         }
     }
 
+    @Test
+    public void testDefault_ns_redefinition() throws Exception {
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Canonicalizer20010315_WithCommentsTransformer c = new Canonicalizer20010315_WithCommentsTransformer();
+        c.setOutputStream(baos);
+        XMLEventReader xmlSecEventReader = xmlInputFactory.createXMLEventReader(
+                this.getClass().getClassLoader().getResourceAsStream(
+                        "org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml")
+        );
+
+        XMLSecEvent xmlSecEvent = null;
+        while (xmlSecEventReader.hasNext()) {
+            xmlSecEvent = (XMLSecEvent) xmlSecEventReader.nextEvent();
+            if (xmlSecEvent.isStartElement() && xmlSecEvent.asStartElement().getName().equals(new QName("http://www.w3.org/2000/09/xmldsig#", "Object"))) {
+                break;
+            }
+        }
+        while (xmlSecEventReader.hasNext()) {
+
+            c.transform(xmlSecEvent);
+
+            if (xmlSecEvent.isEndElement() && xmlSecEvent.asEndElement().getName().equals(new QName("http://www.w3.org/2000/09/xmldsig#", "Object"))) {
+                break;
+            }
+            xmlSecEvent = (XMLSecEvent) xmlSecEventReader.nextEvent();
+        }
+
+        byte[] reference =
+                getBytesFromResource(this.getClass().getClassLoader().getResource(
+                        "org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml"));
+        boolean equals = java.security.MessageDigest.isEqual(reference, baos.toByteArray());
+
+        if (!equals) {
+            System.out.println("Expected:\n" + new String(reference, "UTF-8"));
+            System.out.println("");
+            System.out.println("Got:\n" + new String(baos.toByteArray(), "UTF-8"));
+        }
+
+        assertTrue(equals);
+    }
+
 //   /**
 //    * The XPath data model represents data using UCS characters.
 //    * Implementations MUST use XML processors that support UTF-8 and UTF-16

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/RSASecurityTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/RSASecurityTest.java?rev=1362616&r1=1362615&r2=1362616&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/RSASecurityTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/RSASecurityTest.java Tue Jul 17 19:26:06 2012
@@ -80,11 +80,8 @@ public class RSASecurityTest extends org
         documentBuilderFactory.setCoalescing(false);
         documentBuilderFactory.setIgnoringElementContentWhitespace(false);
     }
-    
 
-    // TODO - not working? See SANTUARIO-328.
     @Test
-    @org.junit.Ignore
     public void test_enveloping() throws Exception {
         // Read in plaintext document
         InputStream sourceDocument = 

Added: santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml?rev=1362616&view=auto
==============================================================================
--- santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml (added)
+++ santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml Tue Jul 17 19:26:06 2012
@@ -0,0 +1,3 @@
+<dsig:Object xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Id="envelopedData"><FOO xmlns="http://www.foo.org/foo">
+        foo
+    </FOO></dsig:Object>
\ No newline at end of file

Propchange: santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_c14n.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml?rev=1362616&view=auto
==============================================================================
--- santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml (added)
+++ santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml Tue Jul 17 19:26:06 2012
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
+    <dsig:Object Id="envelopedData" xmlns="" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><FOO xmlns="http://www.foo.org/foo">
+        foo
+    </FOO></dsig:Object>
+</Signature>
\ No newline at end of file

Propchange: santuario/xml-security-java/trunk/src/test/resources/org/apache/xml/security/c14n/in/default_ns_redefinition_input.xml
------------------------------------------------------------------------------
    svn:eol-style = native