]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/ipp-support.c
Fix requested attributes lists - missing -col versions of counters and the
[thirdparty/cups.git] / cups / ipp-support.c
index 895e6fc430d59b9fb47da6b923f6deb068d16ddb..efc3f74a28da7cd7f0fad3f624449cdf3d7801f9 100644 (file)
@@ -1,18 +1,11 @@
 /*
- * "$Id$"
- *
  * Internet Printing Protocol support functions for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file.  If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
- * This file is subject to the Apple OS-Developed Software exception.
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more
+ * information.
  */
 
 /*
@@ -78,7 +71,8 @@ static const char * const ipp_status_oks[] =  /* "OK" status codes */
                  "client-error-account-info-needed",
                  "client-error-account-closed",
                  "client-error-account-limit-reached",
-                 "client-error-account-authorization-failed"
+                 "client-error-account-authorization-failed",
+                 "client-error-not-fetchable"
                },
                * const ipp_status_480s[] =     /* Vendor client errors */
                {
@@ -195,7 +189,7 @@ static const char * const ipp_std_ops[] =
                  "Suspend-Current-Job",
                  "Resume-Job",
 
-                 /* 0x0030 - 0x003e */
+                 /* 0x0030 - 0x003f */
                  "Promote-Job",
                  "Schedule-Job-After",
                  "0x0032",
@@ -210,7 +204,51 @@ static const char * const ipp_std_ops[] =
                  "Close-Job",
                  "Identify-Printer",
                  "Validate-Document",
-                 "Send-Hardcopy-Document"
+                 "Add-Document-Images",
+                 "Acknowledge-Document",
+
+                 /* 0x0040 - 0x004f */
+                 "Acknowledge-Identify-Printer",
+                 "Acknowledge-Job",
+                 "Fetch-Document",
+                 "Fetch-Job",
+                 "Get-Output-Device-Attributes",
+                 "Update-Active-Jobs",
+                 "Deregister-Output-Device",
+                 "Update-Document-Status",
+                 "Update-Job-Status",
+                 "Update-Output-Device-Attributes",
+                 "Get-Next-Document-Data",
+                  "Allocate-Printer-Resources",
+                  "Create-Printer",
+                  "Deallocate-Printer-Resources",
+                  "Delete-Printer",
+                  "Get-Printers",
+
+                  /* 0x0050 - 0x005f */
+                  "Shutdown-One-Printer",
+                  "Startup-One-Printer",
+                  "Cancel-Resource",
+                  "Create-Resource",
+                  "Install-Resource",
+                  "Send-Resource-Data",
+                  "Set-Resource-Attributes",
+                  "Create-Resource-Subscriptions",
+                  "Create-System-Subscriptions",
+                  "Disable-All-Printers",
+                  "Enable-All-Printers",
+                  "Get-System-Attributes",
+                  "Get-System-Supported-Values",
+                  "Pause-All-Printers",
+                  "Pause-All-Printers-After-Current-Job",
+                  "Register-Output-Device",
+
+                  /* 0x0060 - 0x0064 */
+                  "Restart-System",
+                  "Resume-All-Printers",
+                  "Set-System-Attributes",
+                  "Shutdown-All-Printers",
+                  "Startup-All-Printers"
                },
                * const ipp_cups_ops[] =
                {
@@ -232,7 +270,8 @@ static const char * const ipp_std_ops[] =
                },
                * const ipp_cups_ops2[] =
                {
-                 "CUPS-Get-Document"
+                 "CUPS-Get-Document",
+                 "CUPS-Create-Local-Printer"
                },
                * const ipp_tag_names[] =
                {                       /* Value/group tag names */
@@ -415,10 +454,10 @@ static const char * const ipp_document_states[] =
                  "punch-quad-top",     /* Finishings 2.0 */
                  "punch-quad-right",   /* Finishings 2.0 */
                  "punch-quad-bottom",  /* Finishings 2.0 */
-                 "86",
-                 "87",
-                 "88",
-                 "89",
+                 "punch-multiple-left",/* Finishings 2.1/Canon */
+                 "punch-multiple-top", /* Finishings 2.1/Canon */
+                 "punch-multiple-right",/* Finishings 2.1/Canon */
+                 "punch-multiple-bottom",/* Finishings 2.1/Canon */
                  "fold-accordian",     /* Finishings 2.0 */
                  "fold-double-gate",   /* Finishings 2.0 */
                  "fold-gate",          /* Finishings 2.0 */
@@ -429,7 +468,8 @@ static const char * const ipp_document_states[] =
                  "fold-parallel",      /* Finishings 2.0 */
                  "fold-poster",        /* Finishings 2.0 */
                  "fold-right-gate",    /* Finishings 2.0 */
-                 "fold-z"              /* Finishings 2.0 */
+                 "fold-z",             /* Finishings 2.0 */
+                  "fold-engineering-z" /* Finishings 2.1 */
                },
                * const ipp_finishings_vendor[] =
                {
@@ -594,7 +634,7 @@ static size_t       ipp_col_string(ipp_t *col, char *buffer, size_t bufsize);
  * trailing nul. The buffer pointer can be NULL to get the required length,
  * just like (v)snprintf.
  *
- * @since CUPS 1.6/OS X 10.8@
+ * @since CUPS 1.6/macOS 10.8@
  */
 
 size_t                                 /* O - Number of bytes less nul */
@@ -825,7 +865,7 @@ ippAttributeString(
  * "attribute-name")@ will return a non-NULL pointer.  The array must be freed
  * using the @code cupsArrayDelete@ function.
  *
- * @since CUPS 1.7/OS X 10.9@
+ * @since CUPS 1.7/macOS 10.9@
  */
 
 cups_array_t *                         /* O - CUPS array or @code NULL@ if all */
@@ -876,18 +916,24 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "force-front-side-actual",
     "imposition-template-actual",
     "impressions",
+    "impressions-col",
     "impressions-completed",
+    "impressions-completed-col",
     "impressions-completed-current-copy",
     "insert-sheet-actual",
     "k-octets",
     "k-octets-processed",
     "last-document",
+    "materials-col-actual",            /* IPP 3D */
     "media-actual",
     "media-col-actual",
     "media-input-tray-check-actual",
     "media-sheets",
+    "media-sheets-col",
     "media-sheets-completed",
+    "media-sheets-completed-col",
     "more-info",
+    "multiple-object-handling-actual", /* IPP 3D */
     "number-up-actual",
     "orientation-requested-actual",
     "output-bin-actual",
@@ -897,14 +943,21 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "page-order-received-actual",
     "page-ranges-actual",
     "pages",
+    "pages-col",
     "pages-completed",
+    "pages-completed-col",
     "pages-completed-current-copy",
+    "platform-temperature-actual",     /* IPP 3D */
     "presentation-direction-number-up-actual",
+    "print-accuracy-actual",           /* IPP 3D */
+    "print-base-actual",               /* IPP 3D */
     "print-color-mode-actual",
     "print-content-optimize-actual",
+    "print-objects-actual",            /* IPP 3D */
     "print-quality-actual",
     "print-rendering-intent-actual",
     "print-scaling-actual",            /* IPP Paid Printing */
+    "print-supports-actual",           /* IPP 3D */
     "printer-resolution-actual",
     "printer-up-time",
     "separator-sheets-actual",
@@ -938,9 +991,12 @@ ippCreateRequestedArray(ipp_t *request)    /* I - IPP request */
     "feed-orientation-supported",
     "finishings",
     "finishings-col",
+    "finishings-col-database",
     "finishings-col-default",
+    "finishings-col-ready",
     "finishings-col-supported",
     "finishings-default",
+    "finishings-ready",
     "finishings-supported",
     "font-name-requested",
     "font-name-requested-default",
@@ -959,12 +1015,27 @@ ippCreateRequestedArray(ipp_t *request)  /* I - IPP request */
     "insert-sheet",
     "insert-sheet-default",
     "insert-sheet-supported",
+    "material-amount-units-supported", /* IPP 3D */
+    "material-diameter-supported",     /* IPP 3D */
+    "material-purpose-supported",      /* IPP 3D */
+    "material-rate-supported",         /* IPP 3D */
+    "material-rate-units-supported",   /* IPP 3D */
+    "material-shell-thickness-supported",/* IPP 3D */
+    "material-temperature-supported",  /* IPP 3D */
+    "material-type-supported",         /* IPP 3D */
+    "materials-col",                   /* IPP 3D */
+    "materials-col-database",          /* IPP 3D */
+    "materials-col-default",           /* IPP 3D */
+    "materials-col-ready",             /* IPP 3D */
+    "materials-col-supported",         /* IPP 3D */
+    "max-materials-col-supported",     /* IPP 3D */
     "max-stitching-locations-supported",
     "media",
     "media-back-coating-supported",
     "media-bottom-margin-supported",
     "media-col",
     "media-col-default",
+    "media-col-ready",
     "media-col-supported",
     "media-color-supported",
     "media-default",
@@ -979,6 +1050,7 @@ ippCreateRequestedArray(ipp_t *request)    /* I - IPP request */
     "media-left-margin-supported",
     "media-order-count-supported",
     "media-pre-printed-supported",
+    "media-ready",
     "media-recycled-supported",
     "media-right-margin-supported",
     "media-size-supported",
@@ -991,6 +1063,9 @@ ippCreateRequestedArray(ipp_t *request)    /* I - IPP request */
     "multiple-document-handling",
     "multiple-document-handling-default",
     "multiple-document-handling-supported",
+    "multiple-object-handling",                /* IPP 3D */
+    "multiple-object-handling-default",        /* IPP 3D */
+    "multiple-object-handling-supported",/* IPP 3D */
     "number-up",
     "number-up-default",
     "number-up-supported",
@@ -1019,15 +1094,27 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "pdl-init-file-name-subdirectory-supported",
     "pdl-init-file-name-supported",
     "pdl-init-file-supported",
+    "platform-temperature",            /* IPP 3D */
+    "platform-temperature-default",    /* IPP 3D */
+    "platform-temperature-supported",  /* IPP 3D */
     "presentation-direction-number-up",
     "presentation-direction-number-up-default",
     "presentation-direction-number-up-supported",
+    "print-accuracy",                  /* IPP 3D */
+    "print-accuracy-default",          /* IPP 3D */
+    "print-accuracy-supported",                /* IPP 3D */
+    "print-base",                      /* IPP 3D */
+    "print-base-default",              /* IPP 3D */
+    "print-base-supported",            /* IPP 3D */
     "print-color-mode",
     "print-color-mode-default",
     "print-color-mode-supported",
     "print-content-optimize",
     "print-content-optimize-default",
     "print-content-optimize-supported",
+    "print-objects",                   /* IPP 3D */
+    "print-objects-default",           /* IPP 3D */
+    "print-objects-supported",         /* IPP 3D */
     "print-quality",
     "print-quality-default",
     "print-quality-supported",
@@ -1037,6 +1124,9 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "print-scaling",                   /* IPP Paid Printing */
     "print-scaling-default",           /* IPP Paid Printing */
     "print-scaling-supported",         /* IPP Paid Printing */
+    "print-supports",                  /* IPP 3D */
+    "print-supports-default",          /* IPP 3D */
+    "print-supports-supported",                /* IPP 3D */
     "printer-resolution",
     "printer-resolution-default",
     "printer-resolution-supported",
@@ -1121,13 +1211,17 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "job-hold-until-actual",
     "job-id",
     "job-impressions",
+    "job-impressions-col",
     "job-impressions-completed",
+    "job-impressions-completed-col",
     "job-k-octets",
     "job-k-octets-processed",
     "job-mandatory-attributes",
     "job-media-progress",              /* CUPS extension */
     "job-media-sheets",
+    "job-media-sheets-col",
     "job-media-sheets-completed",
+    "job-media-sheets-completed-col",
     "job-message-from-operator",
     "job-more-info",
     "job-name",
@@ -1135,7 +1229,9 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "job-originating-user-name",
     "job-originating-user-uri",
     "job-pages",
+    "job-pages-col",
     "job-pages-completed",
+    "job-pages-completed-col",
     "job-pages-completed-current-copy",
     "job-printer-state-message",       /* CUPS extension */
     "job-printer-state-reasons",       /* CUPS extension */
@@ -1151,10 +1247,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "job-state-reasons",
     "job-uri",
     "job-uuid",
+    "materials-col-actual",            /* IPP 3D */
     "media-actual",
     "media-col-actual",
     "media-check-input-tray-actual",
     "multiple-document-handling-actual",
+    "multiple-object-handling-actual", /* IPP 3D */
     "number-of-documents",
     "number-of-intervening-jobs",
     "number-up-actual",
@@ -1166,12 +1264,17 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "page-delivery-actual",
     "page-order-received-actual",
     "page-ranges-actual",
+    "platform-temperature-actual",     /* IPP 3D */
     "presentation-direction-number-up-actual",
+    "print-accuracy-actual",           /* IPP 3D */
+    "print-base-actual",               /* IPP 3D */
     "print-color-mode-actual",
     "print-content-optimize-actual",
+    "print-objects-actual",            /* IPP 3D */
     "print-quality-actual",
     "print-rendering-intent-actual",
     "print-scaling-actual",            /* IPP Paid Printing */
+    "print-supports-actual",           /* IPP 3D */
     "printer-resolution-actual",
     "separator-sheets-actual",
     "sheet-collate-actual",
@@ -1193,6 +1296,7 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
   };
   static const char * const job_template[] =
   {                                    /* job-template group */
+    "accuracy-units-supported",                /* IPP 3D */
     "confirmation-sheet-print",                /* IPP FaxOut */
     "confirmation-sheet-print-default",
     "copies",
@@ -1215,9 +1319,12 @@ ippCreateRequestedArray(ipp_t *request)  /* I - IPP request */
     "feed-orientation-supported",
     "finishings",
     "finishings-col",
+    "finishings-col-database",
     "finishings-col-default",
+    "finishings-col-ready",
     "finishings-col-supported",
     "finishings-default",
+    "finishings-ready",
     "finishings-supported",
     "font-name-requested",
     "font-name-requested-default",
@@ -1300,6 +1407,20 @@ ippCreateRequestedArray(ipp_t *request)  /* I - IPP request */
     "job-sheets-default",
     "job-sheets-supported",
     "logo-uri-schemes-supported",
+    "material-amount-units-supported", /* IPP 3D */
+    "material-diameter-supported",     /* IPP 3D */
+    "material-purpose-supported",      /* IPP 3D */
+    "material-rate-supported",         /* IPP 3D */
+    "material-rate-units-supported",   /* IPP 3D */
+    "material-shell-thickness-supported",/* IPP 3D */
+    "material-temperature-supported",  /* IPP 3D */
+    "material-type-supported",         /* IPP 3D */
+    "materials-col",                   /* IPP 3D */
+    "materials-col-database",          /* IPP 3D */
+    "materials-col-default",           /* IPP 3D */
+    "materials-col-ready",             /* IPP 3D */
+    "materials-col-supported",         /* IPP 3D */
+    "max-materials-col-supported",     /* IPP 3D */
     "max-save-info-supported",
     "max-stitching-locations-supported",
     "media",
@@ -1307,6 +1428,7 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "media-bottom-margin-supported",
     "media-col",
     "media-col-default",
+    "media-col-ready",
     "media-col-supported",
     "media-color-supported",
     "media-default",
@@ -1321,6 +1443,7 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "media-left-margin-supported",
     "media-order-count-supported",
     "media-pre-printed-supported",
+    "media-ready",
     "media-recycled-supported",
     "media-right-margin-supported",
     "media-size-supported",
@@ -1333,6 +1456,9 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "multiple-document-handling",
     "multiple-document-handling-default",
     "multiple-document-handling-supported",
+    "multiple-object-handling",                /* IPP 3D */
+    "multiple-object-handling-default",        /* IPP 3D */
+    "multiple-object-handling-supported",/* IPP 3D */
     "number-of-retries",               /* IPP FaxOut */
     "number-of-retries-default",
     "number-of-retries-supported",
@@ -1370,15 +1496,27 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "pdl-init-file-name-subdirectory-supported",
     "pdl-init-file-name-supported",
     "pdl-init-file-supported",
+    "platform-temperature",            /* IPP 3D */
+    "platform-temperature-default",    /* IPP 3D */
+    "platform-temperature-supported",  /* IPP 3D */
     "presentation-direction-number-up",
     "presentation-direction-number-up-default",
     "presentation-direction-number-up-supported",
+    "print-accuracy",                  /* IPP 3D */
+    "print-accuracy-default",          /* IPP 3D */
+    "print-accuracy-supported",                /* IPP 3D */
+    "print-base",                      /* IPP 3D */
+    "print-base-default",              /* IPP 3D */
+    "print-base-supported",            /* IPP 3D */
     "print-color-mode",
     "print-color-mode-default",
     "print-color-mode-supported",
     "print-content-optimize",
     "print-content-optimize-default",
     "print-content-optimize-supported",
+    "print-objects",                   /* IPP 3D */
+    "print-objects-default",           /* IPP 3D */
+    "print-objects-supported",         /* IPP 3D */
     "print-quality",
     "print-quality-default",
     "print-quality-supported",
@@ -1388,6 +1526,9 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "print-scaling",                   /* IPP Paid Printing */
     "print-scaling-default",           /* IPP Paid Printing */
     "print-scaling-supported",         /* IPP Paid Printing */
+    "print-supports",                  /* IPP 3D */
+    "print-supports-default",          /* IPP 3D */
+    "print-supports-supported",                /* IPP 3D */
     "printer-resolution",
     "printer-resolution-default",
     "printer-resolution-supported",
@@ -1488,10 +1629,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "job-page-limit",                  /* CUPS extension */
     "job-password-encryption-supported",
     "job-password-supported",
+    "job-presets-supported",           /* IPP Presets */
     "job-quota-period",                        /* CUPS extension */
     "job-resolvers-supported",
     "job-settable-attributes-supported",
     "job-spooling-supported",
+    "job-triggers-supported",          /* IPP Presets */
     "jpeg-k-octets-supported",         /* CUPS extension */
     "jpeg-x-dimension-supported",      /* CUPS extension */
     "jpeg-y-dimension-supported",      /* CUPS extension */
@@ -1505,8 +1648,6 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "marker-message",                  /* CUPS extension */
     "marker-names",                    /* CUPS extension */
     "marker-types",                    /* CUPS extension */
-    "media-col-ready",
-    "media-ready",
     "member-names",                    /* CUPS extension */
     "member-uris",                     /* CUPS extension */
     "multiple-destination-uris-supported",/* IPP FaxOut */
@@ -1518,6 +1659,7 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "pages-per-minute",
     "pages-per-minute-color",
     "pdf-k-octets-supported",          /* CUPS extension */
+    "pdf-features-supported",          /* IPP 3D */
     "pdf-versions-supported",          /* CUPS extension */
     "pdl-override-supported",
     "port-monitor",                    /* CUPS extension */
@@ -1528,6 +1670,8 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "printer-charge-info",
     "printer-charge-info-uri",
     "printer-commands",                        /* CUPS extension */
+    "printer-config-change-date-time",
+    "printer-config-change-time",
     "printer-current-time",
     "printer-detailed-status-messages",
     "printer-device-id",
@@ -1545,10 +1689,12 @@ ippCreateRequestedArray(ipp_t *request) /* I - IPP request */
     "printer-get-attributes-supported",
     "printer-icc-profiles",
     "printer-icons",
+    "printer-id",                      /* CUPS extension */
     "printer-info",
     "printer-input-tray",              /* IPP JPS3 */
     "printer-is-accepting-jobs",
     "printer-is-shared",               /* CUPS extension */
+    "printer-is-temporary",            /* CUPS extension */
     "printer-kind",                    /* IPP Paid Printing */
     "printer-location",
     "printer-make-and-model",
@@ -1563,6 +1709,7 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "printer-organization",
     "printer-organizational-unit",
     "printer-output-tray",             /* IPP JPS3 */
+    "printer-queue-id",                        /* CUPS extension */
     "printer-settable-attributes-supported",
     "printer-state",
     "printer-state-change-date-time",
@@ -1606,7 +1753,7 @@ ippCreateRequestedArray(ipp_t *request)   /* I - IPP request */
     "notify-subscriber-user-name",
     "notify-subscriber-user-uri",
     "notify-subscription-id",
-    "subscriptions-uuid"
+    "notify-subscription-uuid"
   };
   static const char * const subscription_template[] =
   {                                    /* subscription-template group */
@@ -1972,7 +2119,7 @@ ippErrorString(ipp_status_t error)        /* I - Error status */
 /*
  * 'ippErrorValue()' - Return a status code for the given name.
  *
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
  */
 
 ipp_status_t                           /* O - IPP status code */
@@ -2014,7 +2161,7 @@ ippErrorValue(const char *name)           /* I - Name */
 /*
  * 'ippOpString()' - Return a name for the given operation id.
  *
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
  */
 
 const char *                           /* O - Name */
@@ -2027,14 +2174,14 @@ ippOpString(ipp_op_t op)                /* I - Operation ID */
   * See if the operation ID is a known value...
   */
 
-  if (op >= IPP_OP_PRINT_JOB && op <= IPP_OP_VALIDATE_DOCUMENT)
+  if (op >= IPP_OP_PRINT_JOB && op < (ipp_op_t)(sizeof(ipp_std_ops) / sizeof(ipp_std_ops[0])))
     return (ipp_std_ops[op]);
   else if (op == IPP_OP_PRIVATE)
     return ("windows-ext");
   else if (op >= IPP_OP_CUPS_GET_DEFAULT && op <= IPP_OP_CUPS_GET_PPD)
     return (ipp_cups_ops[op - IPP_OP_CUPS_GET_DEFAULT]);
-  else if (op == IPP_OP_CUPS_GET_DOCUMENT)
-    return (ipp_cups_ops2[0]);
+  else if (op >= IPP_OP_CUPS_GET_DOCUMENT && op <= IPP_OP_CUPS_CREATE_LOCAL_PRINTER)
+    return (ipp_cups_ops2[op - IPP_OP_CUPS_GET_DOCUMENT]);
 
  /*
   * No, build an "0xxxxx" operation string...
@@ -2049,7 +2196,7 @@ ippOpString(ipp_op_t op)          /* I - Operation ID */
 /*
  * 'ippOpValue()' - Return an operation id for the given name.
  *
- * @since CUPS 1.2/OS X 10.5@
+ * @since CUPS 1.2/macOS 10.5@
  */
 
 ipp_op_t                               /* O - Operation ID */
@@ -2145,9 +2292,9 @@ ippStateString(ipp_state_t state) /* I - State value */
 /*
  * 'ippTagString()' - Return the tag name corresponding to a tag value.
  *
- * The returned names are defined in RFC 2911 and 3382.
+ * The returned names are defined in RFC 8011 and the IANA IPP Registry.
  *
- * @since CUPS 1.4/OS X 10.6@
+ * @since CUPS 1.4/macOS 10.6@
  */
 
 const char *                           /* O - Tag name */
@@ -2165,9 +2312,9 @@ ippTagString(ipp_tag_t tag)               /* I - Tag value */
 /*
  * 'ippTagValue()' - Return the tag value corresponding to a tag name.
  *
- * The tag names are defined in RFC 2911 and 3382.
+ * The tag names are defined in RFC 8011 and the IANA IPP Registry.
  *
- * @since CUPS 1.4/OS X 10.6@
+ * @since CUPS 1.4/macOS 10.6@
  */
 
 ipp_tag_t                              /* O - Tag value */
@@ -2223,6 +2370,14 @@ ipp_col_string(ipp_t  *col,              /* I - Collection attribute */
   ipp_attribute_t      *attr;          /* Current member attribute */
 
 
+  if (!col)
+  {
+    if (buffer)
+      *buffer = '\0';
+
+    return (0);
+  }
+
   bufptr = buffer;
   bufend = buffer + bufsize - 1;
 
@@ -2260,8 +2415,3 @@ ipp_col_string(ipp_t  *col,               /* I - Collection attribute */
 
   return ((size_t)(bufptr - buffer));
 }
-
-
-/*
- * End of "$Id$".
- */