Skip to content

Commit

Permalink
Fix non-quick copies of collection values.
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelrsweet committed May 3, 2024
1 parent bfb1339 commit e979794
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Expand Up @@ -27,6 +27,7 @@ libcups v3.0rc1 (TBD)
- Fixed hang/crash in `cupsEnumDests`/`cupsGetDests` (Issue #74)
- Fixed encoding of IPv6 addresses in HTTP requests (Issue #78)
- Fixed encoding of `IPP_TAG_EXTENSION` values in IPP messages (Issue #80)
- Fixed non-quick copy of collection values.


libcups v3.0b2 (October 5, 2023)
Expand Down
34 changes: 28 additions & 6 deletions cups/ipp.c
Expand Up @@ -1417,14 +1417,36 @@ 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;
Expand Down

0 comments on commit e979794

Please sign in to comment.