You are viewing a plain text version of this content. The canonical link for it is here.
Posted to odf-commits@incubator.apache.org by sv...@apache.org on 2017/03/13 12:54:54 UTC

svn commit: r1786676 - in /incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg: OdfPackageNamespace.java manifest/EncryptionDataElement.java

Author: svanteschubert
Date: Mon Mar 13 12:54:54 2017
New Revision: 1786676

URL: http://svn.apache.org/viewvc?rev=1786676&view=rev
Log:
ODFTOOLKIT-447 Encrypted documents invalid due to misordered manifest XML elements

Added:
    incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfPackageNamespace.java
      - copied, changed from r1786195, incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/dom/OdfDocumentNamespace.java
Modified:
    incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/manifest/EncryptionDataElement.java

Copied: incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfPackageNamespace.java (from r1786195, incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/dom/OdfDocumentNamespace.java)
URL: http://svn.apache.org/viewvc/incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfPackageNamespace.java?p2=incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfPackageNamespace.java&p1=incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/dom/OdfDocumentNamespace.java&r1=1786195&r2=1786676&rev=1786676&view=diff
==============================================================================
--- incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/dom/OdfDocumentNamespace.java (original)
+++ incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/OdfPackageNamespace.java Mon Mar 13 12:54:54 2017
@@ -2,8 +2,6 @@
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
  *
- * Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
- *
  * Use is subject to license terms.
  *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
@@ -20,49 +18,24 @@
  *
  ************************************************************************/
 
-package org.odftoolkit.odfdom.dom;
-
-import org.odftoolkit.odfdom.pkg.NamespaceName;
+package org.odftoolkit.odfdom.pkg;
 
 /**
- * Namespaces of OpenDocument 1.2 XML Schema
+ * Namespaces of OpenDocument 1.2 XML Package Schema
  */
-public enum OdfDocumentNamespace implements NamespaceName {
+public enum OdfPackageNamespace implements NamespaceName {
+
 
-	ANIM("anim", "urn:oasis:names:tc:opendocument:xmlns:animation:1.0"),
-	CHART("chart", "urn:oasis:names:tc:opendocument:xmlns:chart:1.0"),
-	CONFIG("config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0"),
-	DB("db", "urn:oasis:names:tc:opendocument:xmlns:database:1.0"),
-	DC("dc", "http://purl.org/dc/elements/1.1/"),
-	DR3D("dr3d", "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"),
-	DRAW("draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"),
-	FO("fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"),
-	FORM("form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0"),
-	GRDDL("grddl", "http://www.w3.org/2003/g/data-view#"),
-	MATH("math", "http://www.w3.org/1998/Math/MathML"),
-	META("meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"),
-	NUMBER("number", "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"),
-	OF("of", "urn:oasis:names:tc:opendocument:xmlns:of:1.2"),
-	OFFICE("office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0"),
-	PRESENTATION("presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"),
-	SCRIPT("script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0"),
-	SMIL("smil", "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"),
-	STYLE("style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0"),
-	SVG("svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"),
-	TABLE("table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0"),
-	TEXT("text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0"),
-	XFORMS("xforms", "http://www.w3.org/2002/xforms"),
-	XHTML("xhtml", "http://www.w3.org/1999/xhtml"),
-	XLINK("xlink", "http://www.w3.org/1999/xlink"),
+	MANIFEST("chart", "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"),
 	XML("xml", "http://www.w3.org/XML/1998/namespace" );
-    	
+
 	private String mPrefix;
 	private String mUri;
-	
-	OdfDocumentNamespace(String prefix, String uri) {
+
+	OdfPackageNamespace(String prefix, String uri) {
 		mPrefix = prefix;
 		mUri = uri;
-	}    
+	}
 
 	/**
 	 * @return the prefix currently related to ODF Namespace.
@@ -72,9 +45,9 @@ public enum OdfDocumentNamespace impleme
 	}
 
 	/**
-	 * @return the URI identifiying the ODF Namespace.
+	 * @return the URI identifying the ODF Namespace.
 	 */
 	public String getUri() {
 		return mUri;
 	}
-} 
+}

Modified: incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/manifest/EncryptionDataElement.java
URL: http://svn.apache.org/viewvc/incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/manifest/EncryptionDataElement.java?rev=1786676&r1=1786675&r2=1786676&view=diff
==============================================================================
--- incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/manifest/EncryptionDataElement.java (original)
+++ incubator/odf/trunk/odfdom/src/main/java/org/odftoolkit/odfdom/pkg/manifest/EncryptionDataElement.java Mon Mar 13 12:54:54 2017
@@ -1,9 +1,9 @@
 /************************************************************************
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
- * 
+ *
  * Use is subject to license terms.
- * 
+ *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -31,6 +31,8 @@ package org.odftoolkit.odfdom.pkg.manife
 import org.odftoolkit.odfdom.pkg.OdfElement;
 import org.odftoolkit.odfdom.pkg.OdfFileDom;
 import org.odftoolkit.odfdom.pkg.OdfName;
+import org.odftoolkit.odfdom.pkg.OdfPackageNamespace;
+import org.w3c.dom.NodeList;
 /**
  * Manifest implementation of OpenDocument element  {@odf.element manifest:encryption-data}.
  *
@@ -124,7 +126,21 @@ public class EncryptionDataElement exten
 		AlgorithmElement algorithm = ((OdfFileDom) this.ownerDocument).newOdfElement(AlgorithmElement.class);
 		algorithm.setAlgorithmNameAttribute(algorithmNameValue);
 		algorithm.setInitialisationVectorAttribute(initialisationVectorValue);
-		this.appendChild(algorithm);
+        if(this.hasChildNodes()){
+            OdfElement precedingSibling = null;
+            NodeList nl = this.getElementsByTagNameNS(OdfPackageNamespace.MANIFEST.getUri(), "start-key-generation");
+            if(nl.getLength() == 0){
+                nl = this.getElementsByTagNameNS(OdfPackageNamespace.MANIFEST.getUri(), "key-derivation");
+            }
+            if(nl.getLength() != 0){
+               precedingSibling = (OdfElement) nl.item(0);
+               this.insertBefore(algorithm, precedingSibling);
+            }else{
+                this.appendChild(algorithm);
+            }
+        }else{
+            this.appendChild(algorithm);
+        }
 		return algorithm;
 	}
 
@@ -160,8 +176,20 @@ public class EncryptionDataElement exten
 	 public StartKeyGenerationElement newStartKeyGenerationElement(String startKeyGenerationNameValue) {
 		StartKeyGenerationElement startKeyGeneration = ((OdfFileDom) this.ownerDocument).newOdfElement(StartKeyGenerationElement.class);
 		startKeyGeneration.setStartKeyGenerationNameAttribute(startKeyGenerationNameValue);
-		this.appendChild(startKeyGeneration);
-		return startKeyGeneration;
+
+        if(this.hasChildNodes()){
+            OdfElement precedingSibling = null;
+            NodeList nl = this.getElementsByTagNameNS(OdfPackageNamespace.MANIFEST.getUri(), "key-derivation");
+            if(nl.getLength() != 0){
+               precedingSibling = (OdfElement) nl.item(0);
+               this.insertBefore(startKeyGeneration, precedingSibling);
+            }else{
+                this.appendChild(startKeyGeneration);
+            }
+        }else{
+            this.appendChild(startKeyGeneration);
+        }
+        return startKeyGeneration;
 	}
 
 }