]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Fix non-quick copies of collection values.
authorMichael R Sweet <msweet@msweet.org>
Fri, 3 May 2024 15:44:56 +0000 (11:44 -0400)
committerMichael R Sweet <msweet@msweet.org>
Fri, 3 May 2024 15:44:56 +0000 (11:44 -0400)
CHANGES.md
cups/ipp.c

index bd3c6f52d5a0e550ebc0f6d14f80b41f8a3076a6..16706112a5d65dc84af95ef68a0d5e4e0a3ec5e7 100644 (file)
@@ -92,6 +92,7 @@ Changes in CUPS v2.5b1 (TBA)
 - Fixed CGI program initialization and validation of form checkbox and text
   fields.
 - Fixed finishing support in ippeveps.
+- Fixed non-quick copy of collection values.
 - Removed hash support for SHA2-512-224 and SHA2-512-256.
 - Removed `mantohtml` script for generating html pages (use
   `https://www.msweet.org/mantohtml/`)
index 6e1d9cf1c845fb0a59b98a2f20a8b9e3aff90d23..bb32ade27d39a84396f3a2db75cae14d9deac66c 100644 (file)
@@ -1434,15 +1434,37 @@ ippCopyAttribute(
         break;
 
     case IPP_TAG_BEGIN_COLLECTION :
-        for (i = srcattr->num_values, srcval = srcattr->values, dstattr = NULL; i > 0; i --, srcval ++)
+        if (quickcopy)
+        {
+         for (i = srcattr->num_values, srcval = srcattr->values, dstattr = NULL; i > 0; i --, srcval ++)
+         {
+           if (srcval->collection)
+           {
+             if (dstattr)
+               ippSetCollection(dst, &dstattr, ippGetCount(dstattr), srcval->collection);
+             else
+               dstattr = ippAddCollection(dst, srcattr->group_tag, srcattr->name, srcval->collection);
+           }
+         }
+       }
+       else
        {
-         if (srcval->collection)
+         for (i = srcattr->num_values, srcval = srcattr->values, dstattr = NULL; i > 0; i --, srcval ++)
          {
-           if (dstattr)
-             ippSetCollection(dst, &dstattr, ippGetCount(dstattr), srcval->collection);
-           else
-              dstattr = ippAddCollection(dst, srcattr->group_tag, srcattr->name, srcval->collection);
-          }
+           if (srcval->collection)
+           {
+             ipp_t *col = ippNew();    // Copy of collection
+
+             ippCopyAttributes(col, srcval->collection, false, /*cb*/NULL, /*cb_data*/NULL);
+
+             if (dstattr)
+               ippSetCollection(dst, &dstattr, ippGetCount(dstattr), col);
+             else
+               dstattr = ippAddCollection(dst, srcattr->group_tag, srcattr->name, col);
+
+              col->use --;
+           }
+         }
        }
         break;