From: Michael R Sweet Date: Fri, 3 May 2024 15:44:56 +0000 (-0400) Subject: Fix non-quick copies of collection values. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aba917003c8de55e5bf85010f0ecf1f1ddd1408e;p=thirdparty%2Fcups.git Fix non-quick copies of collection values. --- diff --git a/CHANGES.md b/CHANGES.md index bd3c6f52d5..16706112a5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -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/`) diff --git a/cups/ipp.c b/cups/ipp.c index 6e1d9cf1c8..bb32ade27d 100644 --- a/cups/ipp.c +++ b/cups/ipp.c @@ -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;