From: Zdenek Dohnal Date: Thu, 15 Feb 2024 17:15:55 +0000 (+0100) Subject: ppd-cache.c: Check for required attributes if URF or PWG Raster are found X-Git-Tag: v2.4.8~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0003f78a107b399feb2e493181a307fac5123e35;p=thirdparty%2Fcups.git ppd-cache.c: Check for required attributes if URF or PWG Raster are found Some devices have image/urf in document-format-supported, but is missing urf-supported if AirPrint support is turned off, which breaks PPD generation. Check for attribute urf-supported when we are about to decide whether the printer uses AirPrint, so in case the device supports another driverless standard, we can use it for PPD generation. Apply the same for PWG Raster too. Fixes Fedora issue #2263053 --- diff --git a/CHANGES.md b/CHANGES.md index 8290c5e4bd..9688cad8f1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -26,6 +26,7 @@ Changes in CUPS v2.4.8 (TBA) instead of keywords as `InputSlot` values (Issue #859) - Fixed IPP backend to support the "print-scaling" option with IPP printers (Issue #862) +- Fixed checking for required attributes during PPD generation (Issue #890) Changes in CUPS v2.4.7 (2023-09-20) diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c index d664812a2b..711a29f99d 100644 --- a/cups/ppd-cache.c +++ b/cups/ppd-cache.c @@ -3469,9 +3469,11 @@ _ppdCreateFromIPP2( if ((attr = ippFindAttribute(supported, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL) { - is_apple = ippContainsString(attr, "image/urf"); + is_apple = ippContainsString(attr, "image/urf") && (ippFindAttribute(supported, "urf-supported", IPP_TAG_KEYWORD) != NULL); is_pdf = ippContainsString(attr, "application/pdf"); - is_pwg = ippContainsString(attr, "image/pwg-raster") && !is_apple; + is_pwg = ippContainsString(attr, "image/pwg-raster") && !is_apple && + (ippFindAttribute(supported, "pwg-raster-document-resolution-supported", IPP_TAG_KEYWORD) != NULL) && + (ippFindAttribute(supported, "pwg-raster-document-type-supported", IPP_TAG_KEYWORD) != NULL); if (ippContainsString(attr, "image/jpeg")) cupsFilePuts(fp, "*cupsFilter2: \"image/jpeg image/jpeg 0 -\"\n");