Author: lehmi
Date: Thu Jul 25 06:06:10 2024
New Revision: 1919511

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

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

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java?rev=1919511&r1=1919510&r2=1919511&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java Thu 
Jul 25 06:06:10 2024
@@ -82,8 +82,18 @@ public class COSArray extends COSBase im
      */
     public void add( COSBase object )
     {
-        objects.add( object );
-        getUpdateState().update(object);
+        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);
+        }
     }
 
     /**
@@ -98,8 +108,7 @@ public class COSArray extends COSBase im
         {
             base = object.getCOSObject();
         }
-        objects.add(base);
-        getUpdateState().update(base);
+        add(base);
     }
 
     /**
@@ -111,8 +120,18 @@ public class COSArray extends COSBase im
      */
     public void add( int i, COSBase object)
     {
-        objects.add( i, object );
-        getUpdateState().update(object);
+        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);
+        }
     }
 
     /**
@@ -200,8 +219,18 @@ public class COSArray extends COSBase im
      */
     public void set( int index, COSBase object )
     {
-        objects.set( index, object );
-        getUpdateState().update(object);
+        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);
+        }
     }
 
     /**
@@ -229,8 +258,7 @@ public class COSArray extends COSBase im
         {
             base = object.getCOSObject();
         }
-        objects.set( index, base );
-        getUpdateState().update(base);
+        set(index, base);
     }
 
     /**

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java?rev=1919511&r1=1919510&r2=1919511&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java 
Thu Jul 25 06:06:10 2024
@@ -203,8 +203,18 @@ public class COSDictionary extends COSBa
         }
         else
         {
-            items.put(key, value);
-            getUpdateState().update(value);
+            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/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java?rev=1919511&r1=1919510&r2=1919511&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java 
Thu Jul 25 06:06:10 2024
@@ -686,12 +686,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;
     }
 


Reply via email to