You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2024/07/25 06:00:42 UTC

svn commit: r1919510 - in /pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox: cos/COSArray.java cos/COSDictionary.java multipdf/Splitter.java

Author: lehmi
Date: Thu Jul 25 06:00:42 2024
New Revision: 1919510

URL: http://svn.apache.org/viewvc?rev=1919510&view=rev
Log:
PDFBOX-5481: wrap indirect objects whenever they are added directly to a COSDictionary or COSArray

Modified:
    pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
    pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
    pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java

Modified: pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java?rev=1919510&r1=1919509&r2=1919510&view=diff
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java (original)
+++ pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java Thu Jul 25 06:00:42 2024
@@ -68,8 +68,19 @@ public class COSArray extends COSBase im
      */
     public void add( COSBase object )
     {
-        objects.add( object );
-        getUpdateState().update(object);
+        // wrap indirect objects
+        if ((object instanceof COSDictionary || object instanceof COSArray) && !object.isDirect()
+                && object.getKey() != null)
+        {
+            COSObject cosObject = new COSObject(object, object.getKey());
+            objects.add(cosObject);
+            getUpdateState().update(cosObject);
+        }
+        else
+        {
+            objects.add(object);
+            getUpdateState().update(object);
+        }
     }
 
     /**
@@ -84,8 +95,7 @@ public class COSArray extends COSBase im
         {
             base = object.getCOSObject();
         }
-        objects.add(base);
-        getUpdateState().update(base);
+        add(base);
     }
 
     /**
@@ -97,8 +107,19 @@ public class COSArray extends COSBase im
      */
     public void add( int i, COSBase object)
     {
-        objects.add( i, object );
-        getUpdateState().update(object);
+        // wrap indirect objects
+        if ((object instanceof COSDictionary || object instanceof COSArray) && !object.isDirect()
+                && object.getKey() != null)
+        {
+            COSObject cosObject = new COSObject(object, object.getKey());
+            objects.add(i, cosObject);
+            getUpdateState().update(cosObject);
+        }
+        else
+        {
+            objects.add(i, object);
+            getUpdateState().update(object);
+        }
     }
 
     /**
@@ -186,8 +207,19 @@ public class COSArray extends COSBase im
      */
     public void set( int index, COSBase object )
     {
-        objects.set( index, object );
-        getUpdateState().update(object);
+        // wrap indirect objects
+        if ((object instanceof COSDictionary || object instanceof COSArray) && !object.isDirect()
+                && object.getKey() != null)
+        {
+            COSObject cosObject = new COSObject(object, object.getKey());
+            objects.set(index, cosObject);
+            getUpdateState().update(cosObject);
+        }
+        else
+        {
+            objects.set(index, object);
+            getUpdateState().update(object);
+        }
     }
 
     /**
@@ -215,8 +247,7 @@ public class COSArray extends COSBase im
         {
             base = object.getCOSObject();
         }
-        objects.set( index, base );
-        getUpdateState().update(base);
+        set( index, base );
     }
 
     /**

Modified: pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java?rev=1919510&r1=1919509&r2=1919510&view=diff
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java (original)
+++ pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java Thu Jul 25 06:00:42 2024
@@ -204,8 +204,19 @@ public class COSDictionary extends COSBa
         }
         else
         {
-            items.put(key, value);
-            getUpdateState().update(value);
+            // wrap indirect objects
+            if ((value instanceof COSDictionary || value instanceof COSArray) && !value.isDirect()
+                    && value.getKey() != null)
+            {
+                COSObject cosObject = new COSObject(value, value.getKey());
+                items.put(key, cosObject);
+                getUpdateState().update(cosObject);
+            }
+            else
+            {
+                items.put(key, value);
+                getUpdateState().update(value);
+            }
         }
     }
 

Modified: pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java?rev=1919510&r1=1919509&r2=1919510&view=diff
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java (original)
+++ pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java Thu Jul 25 06:00:42 2024
@@ -685,12 +685,7 @@ public class Splitter
         destCatalog.setViewerPreferences(sourceCatalog.getViewerPreferences());
         destCatalog.setLanguage(sourceCatalog.getLanguage());
         destCatalog.setMarkInfo(sourceCatalog.getMarkInfo());
-        // copy the COS-object itself instead of the PD-object to avoid a malformed result
-        COSObject metaData = sourceCatalog.getCOSObject().getCOSObject(COSName.METADATA);
-        if (metaData != null)
-        {
-            destCatalog.getCOSObject().setItem(COSName.METADATA, metaData);
-        }
+        destCatalog.setMetadata(sourceCatalog.getMetadata());
         return document;
     }