]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Fix some more IPP Everywhere PPD generator problems (Issue #4921)
authorMichael Sweet <michael.r.sweet@gmail.com>
Fri, 18 Nov 2016 12:40:34 +0000 (07:40 -0500)
committerMichael Sweet <michael.r.sweet@gmail.com>
Fri, 18 Nov 2016 12:40:34 +0000 (07:40 -0500)
CHANGES.txt
cups/ppd-cache.c

index 33a750168fb9a633f90fe907060efd7c070b001f..00dd75252cccf021c64457065ac856ee029c3e81 100644 (file)
@@ -1,11 +1,11 @@
-CHANGES.txt - 2.2.2 - 2016-11-17
+CHANGES.txt - 2.2.2 - 2016-11-18
 --------------------------------
 
 CHANGES IN CUPS V2.2.2
 
        - Fixed some issues with the Zebra ZPL printer driver (Issue #4898)
        - Fixed some issues with IPP Everywhere printer support (Issue #4893,
-         Issue #4909, Issue #4916)
+         Issue #4909, Issue #4916, Issue #4921)
        - The cups-lpd program did not catch all legacy usage of ISO-8859-1
           (Issue #4899)
         - Fixed builds on systems without a working poll() implementation
index 070b1f746e560ddd0ff7aeb1a37646e0386e4c2a..cec0606543a18e9f6c686c93c2fbf71d72d786b2 100644 (file)
@@ -3216,11 +3216,18 @@ _ppdCreateFromIPP(char   *buffer,       /* I - Filename buffer */
                        "*DefaultPageRegion: %s\n", ppdname);
     for (i = 0, count = ippGetCount(attr); i < count; i ++)
     {
-      media_size = ippGetCollection(attr, i);
-      x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
-      y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
+      if (ippGetValueTag(attr) == IPP_TAG_BEGIN_COLLECTION)
+      {
+       media_size = ippGetCollection(attr, i);
+       x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
+       y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
 
-      if (x_dim && y_dim && (pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0))) != NULL)
+       pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
+      }
+      else
+        pwg = pwgMediaForPWG(ippGetString(attr, i, NULL));
+
+      if (pwg)
       {
         char   twidth[256],            /* Width string */
                tlength[256];           /* Length string */
@@ -3237,11 +3244,18 @@ _ppdCreateFromIPP(char   *buffer,       /* I - Filename buffer */
                       "*DefaultPaperDimension: %s\n", ppdname, ppdname);
     for (i = 0, count = ippGetCount(attr); i < count; i ++)
     {
-      media_size = ippGetCollection(attr, i);
-      x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
-      y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
+      if (ippGetValueTag(attr) == IPP_TAG_BEGIN_COLLECTION)
+      {
+       media_size = ippGetCollection(attr, i);
+       x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
+       y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
 
-      if (x_dim && y_dim && (pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0))) != NULL)
+       pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
+      }
+      else
+        pwg = pwgMediaForPWG(ippGetString(attr, i, NULL));
+
+      if (pwg)
       {
         char   tleft[256],             /* Left string */
                tbottom[256],           /* Bottom string */