You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2023/01/18 15:33:35 UTC

[jackrabbit-filevault] branch bugfix/store-attributes-in-entries.xml created (now 29946b19)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a change to branch bugfix/store-attributes-in-entries.xml
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git


      at 29946b19 JCRVLT-677 store attributes within "entries.xml"

This branch includes the following new commits:

     new 29946b19 JCRVLT-677 store attributes within "entries.xml"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[jackrabbit-filevault] 01/01: JCRVLT-677 store attributes within "entries.xml"

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch bugfix/store-attributes-in-entries.xml
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 29946b19a000a44c4bb2f6c2adc50e2b9d66d587
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Wed Jan 18 16:33:27 2023 +0100

    JCRVLT-677 store attributes within "entries.xml"
    
    This fixes the NPE being issued when trying to resolve conflicts
    Convert tests to JUnit5
---
 parent/pom.xml                                     |  7 ++
 vault-cli/src/main/config/logback.xml              |  2 +-
 vault-vlt/pom.xml                                  |  4 +-
 .../vault/vlt/meta/xml/XmlEntryInfo.java           | 15 ++--
 .../vault/vlt/{Test.java => ManualIT.java}         |  4 +-
 .../jackrabbit/vault/vlt/meta/TextXMLEntries.java  | 82 ---------------------
 ...bstractTestEntries.java => XmlEntriesTest.java} | 85 ++++++++++++++++++----
 7 files changed, 90 insertions(+), 109 deletions(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index b2c17e37..60b25c99 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -529,6 +529,13 @@ Bundle-Category: jackrabbit
                 <artifactId>junit</artifactId>
                 <version>4.13.2</version>
             </dependency>
+            <dependency>
+                <groupId>org.junit</groupId>
+                <artifactId>junit-bom</artifactId>
+                <version>5.9.2</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
diff --git a/vault-cli/src/main/config/logback.xml b/vault-cli/src/main/config/logback.xml
index 22efc0ba..b528eba9 100644
--- a/vault-cli/src/main/config/logback.xml
+++ b/vault-cli/src/main/config/logback.xml
@@ -21,7 +21,7 @@
     <!-- encoders are assigned the type
          ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
     <encoder>
-      <pattern>[%-5level] %msg%n</pattern>
+      <pattern>[%-5level] %msg %n</pattern>
       <!-- more verbose pattern example: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n -->
     </encoder>
   </appender>
diff --git a/vault-vlt/pom.xml b/vault-vlt/pom.xml
index 85a12530..50d5eea3 100644
--- a/vault-vlt/pom.xml
+++ b/vault-vlt/pom.xml
@@ -87,8 +87,8 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java b/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java
index b5246314..06942ac8 100644
--- a/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java
+++ b/vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/meta/xml/XmlEntryInfo.java
@@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
  */
 public class XmlEntryInfo implements VltEntryInfo {
 
-    private static final String AN_NAME = "name";
+    private static final String AN_NAME = "name"; // file name, mandatory for type "mine" and "theirs"
     private static final String AN_DATE = "date";
     private static final String AN_MD5 = "md5";
     private static final String AN_CONTENT_TYPE = "contentType";
@@ -212,27 +212,28 @@ public class XmlEntryInfo implements VltEntryInfo {
 
     public void write(XMLStreamWriter writer) throws XMLStreamException {
         writer.writeStartElement(type.name().toLowerCase());
+        writeAttributes(writer);
         writer.writeEndElement();
         dirty = false;
     }
 
-    protected void addAttributes(AttributesImpl attrs) {
+    protected void writeAttributes(XMLStreamWriter writer) throws XMLStreamException {
         if (name != null) {
-            attrs.addAttribute("", AN_NAME, "", "CDATA", name);
+            writer.writeAttribute(AN_NAME, name);
         }
         if (date > 0) {
             Calendar c = Calendar.getInstance();
             c.setTimeInMillis(date);
-            attrs.addAttribute("", AN_DATE, "", "CDATA", ISO8601.format(c));
+            writer.writeAttribute(AN_DATE, ISO8601.format(c));
         }
         if (md5 != null) {
-            attrs.addAttribute("", AN_MD5, "", "CDATA", md5.toString());
+            writer.writeAttribute(AN_MD5, md5.toString());
         }
         if (contentType != null) {
-            attrs.addAttribute("", AN_CONTENT_TYPE, "", "CDATA", contentType);
+            writer.writeAttribute(AN_CONTENT_TYPE, contentType);
         }
         if (size > 0) {
-            attrs.addAttribute("", AN_SIZE, "", "CDATA", String.valueOf(size));
+            writer.writeAttribute(AN_SIZE, String.valueOf(size));
         }
     }
 
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/Test.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/ManualIT.java
similarity index 98%
rename from vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/Test.java
rename to vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/ManualIT.java
index 17f86209..422980ae 100644
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/Test.java
+++ b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/ManualIT.java
@@ -31,13 +31,11 @@ import java.util.zip.ZipOutputStream;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.vault.vlt.meta.xml.zip.UpdateableZipFile;
-import org.junit.Ignore;
 
 /**
  * {@code Test}...
  */
-@Ignore
-public class Test {
+public class ManualIT {
 
     public static final String TEXT = "/*\n" +
             " * Licensed to the Apache Software Foundation (ASF) under one or more\n" +
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
deleted file mode 100644
index 6a55c8a2..00000000
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/TextXMLEntries.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.vault.vlt.meta;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-
-import org.apache.jackrabbit.vault.vlt.VltException;
-import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntries;
-import org.apache.jackrabbit.vault.vlt.meta.xml.zip.ZipMetaDir;
-
-/**
- * {@code TextXMLEntries}...
- */
-public class TextXMLEntries extends AbstractTestEntries {
-
-    private File file = new File("target/vlt-test-entries.zip");
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        if (file.exists()) {
-            file.delete();
-        }
-        dir = new ZipMetaDir(file);
-        dir.create("/a/b/c");
-        dir.close();
-        dir = null;
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    protected void open() throws IOException, VltException {
-        dir = new ZipMetaDir(file);
-        entries = dir.getEntries();
-    }
-
-
-    public void testXSS() throws VltException {
-        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
-                "<!DOCTYPE entries [\n" +
-                "   <!ENTITY % foo \"bar\">\n" +
-                "]>\n" +
-                "<entries path=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
-                " <entry name=\".content.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
-                "   <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
-                "   <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
-                " </entry>\n" +
-                " <entry name=\"_rep_policy.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3/rep:policy\">\n" +
-                "   <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
-                "   <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
-                " </entry>\n" +
-                "</entries>";
-        try {
-            XmlEntries entries = XmlEntries.load(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
-            assertTrue(entries.hasEntry(".content.xml"));
-            fail("XML entries with DTD should fail.");
-        } catch (VltException e) {
-            // ok
-        }
-    }
-}
\ No newline at end of file
diff --git a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/AbstractTestEntries.java b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/XmlEntriesTest.java
similarity index 51%
rename from vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/AbstractTestEntries.java
rename to vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/XmlEntriesTest.java
index f9214247..648a1ae8 100644
--- a/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/AbstractTestEntries.java
+++ b/vault-vlt/src/test/java/org/apache/jackrabbit/vault/vlt/meta/XmlEntriesTest.java
@@ -14,26 +14,36 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.jackrabbit.vault.vlt.meta;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.jackrabbit.vault.fs.api.DumpContext;
 import org.apache.jackrabbit.vault.fs.api.Dumpable;
 import org.apache.jackrabbit.vault.util.MD5;
 import org.apache.jackrabbit.vault.vlt.VltException;
+import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntries;
+import org.apache.jackrabbit.vault.vlt.meta.xml.XmlEntryInfo;
+import org.apache.jackrabbit.vault.vlt.meta.xml.zip.ZipMetaDir;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 
-import junit.framework.TestCase;
-
-/**
- * {@code TestEntries}...
- */
-public abstract class AbstractTestEntries extends TestCase {
+class XmlEntriesTest {
 
-    protected File file = new File("target/vlt-test-entries.zip");
+    private File file;
 
     private boolean verbose;
 
@@ -41,7 +51,13 @@ public abstract class AbstractTestEntries extends TestCase {
 
     protected VltEntries entries;
 
-    abstract protected void open() throws IOException, VltException;
+    @TempDir
+    File tempDir;
+
+    protected void open() throws IOException, VltException {
+        dir = new ZipMetaDir(file);
+        entries = dir.getEntries();
+    }
 
     protected void close() throws IOException {
         if (entries != null) {
@@ -58,7 +74,8 @@ public abstract class AbstractTestEntries extends TestCase {
         open();
     }
 
-    public void testRepoAddress() throws IOException, VltException {
+    @Test
+    void testRepoAddress() throws IOException, VltException {
         open();
         assertNull(dir.getRepositoryUrl());
         dir.setRepositoryUrl("http://localhost:8080");
@@ -67,15 +84,17 @@ public abstract class AbstractTestEntries extends TestCase {
         assertEquals("http://localhost:8080", dir.getRepositoryUrl());
     }
 
-    public void testAddEntry() throws VltException, IOException {
+    @Test
+    void testAddEntry() throws VltException, IOException {
         open();
         assertFalse(entries.hasEntry("foo.png"));
-        VltEntry e = entries.update("foo.png", "/bla", "foo.png");
+        entries.update("foo.png", "/bla", "foo.png");
         reopen();
         assertTrue(entries.hasEntry("foo.png"));
     }
 
-    public void testAddInfo() throws VltException, IOException {
+    @Test
+    void testAddInfo() throws VltException, IOException {
         testAddEntry();
 
         assertTrue(entries.hasEntry("foo.png"));
@@ -89,7 +108,8 @@ public abstract class AbstractTestEntries extends TestCase {
         assertNotNull(e.base());
     }
 
-    public void testModifyInfo() throws VltException, IOException {
+    @Test
+    void testModifyInfo() throws VltException, IOException {
         testAddInfo();
         reopen();
 
@@ -101,6 +121,7 @@ public abstract class AbstractTestEntries extends TestCase {
         base.setDate(1000);
         base.setMd5(new MD5(2,3));
         base.setSize(4);
+        ((XmlEntryInfo) base).setName("myName");
         reopen();
         e = entries.getEntry("foo.png");
         base = e.base();
@@ -108,8 +129,19 @@ public abstract class AbstractTestEntries extends TestCase {
         assertEquals(1000, base.getDate());
         assertEquals(new MD5(2,3), base.getMd5());
         assertEquals(4, base.getSize());
+        assertEquals("myName", ((XmlEntryInfo) base).getName());
     }
 
+    @BeforeEach
+    protected void setUp() throws Exception {
+        file = new File(tempDir, "vlt-test-entries.zip");
+        dir = new ZipMetaDir(file);
+        dir.create("/a/b/c");
+        dir.close();
+        dir = null;
+    }
+
+    @AfterEach
     protected void tearDown() throws Exception {
         if (entries != null && verbose) {
             PrintWriter out = new PrintWriter(System.out);
@@ -120,4 +152,29 @@ public abstract class AbstractTestEntries extends TestCase {
             out.flush();
         }
     }
+
+    @Test
+    void testXSS() throws VltException {
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "<!DOCTYPE entries [\n" +
+                "   <!ENTITY % foo \"bar\">\n" +
+                "]>\n" +
+                "<entries path=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
+                " <entry name=\".content.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3\">\n" +
+                "   <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
+                "   <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"268b8e1f6d7b3fc9ec71226ee1a9dc70\" contentType=\"text/xml\" size=\"946\"/>\n" +
+                " </entry>\n" +
+                " <entry name=\"_rep_policy.xml\" rp=\"\" ap=\"/home/users/m/mCY2rm1YSMlKFlJ-NEN3/rep:policy\">\n" +
+                "   <base date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
+                "   <work date=\"2018-10-02T11:44:02.000+02:00\" md5=\"5a788decc1968551e2838bc46914f75a\" contentType=\"text/xml\" size=\"500\"/>\n" +
+                " </entry>\n" +
+                "</entries>";
+        try {
+            XmlEntries entries = XmlEntries.load(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
+            assertTrue(entries.hasEntry(".content.xml"));
+            fail("XML entries with DTD should fail.");
+        } catch (VltException e) {
+            // ok
+        }
+    }
 }
\ No newline at end of file