libcupsfilters and libppd Second Generation - Forth Beta Release!

3 minute read

Continuing the packaging for Debian, Ubuntu, and Red Hat distributions more bugs got found and fixed.

First, Zdenek Dohnal from Red Hat has run all the components of the new generation of cups-filters through Coverity and found several bugs: Memory leaks, files not closed, possible string overflows, … He fixed all these bugs in the upstream code. This assures reliability and security of all the new components, especially if being part of permanently running daemons. Thanks a lot, Zdenek!

During the selection process for contributors for the Google Summer of Code 2023 we give some assignments to the candidates, usually reported bugs, but also other code-related work items which occur at OpenPrinting. This way we got some bugs fixed, from users reporting that their printer does not work in driverless mode or something wrong or nothing comes out as the printout.

Especially with one candidate, having gotten assigned a bug report about the PostScript Printer Application not preventing the use of malformed, user-supplied PPD files, we realized that we did not transfer CUPS’ valuable command line tool cupstestppd into libppd. This the candidate has done yet, as the library function ppdTest(), easily callable from a PPD-retrofitting Printer Application.

libcupsfilters got updated to work with the latest version of QPDF (11) as building it showed a lot of warnings about the use of deprecated functions in QPDF. Now it should be ready for the upcoming QPDF 12.


  • Do not free cf_image_t data structure in _cfImageZoomDelete() (cups-filters issue #507) The library-internal _cfImageZoom...() API does not create the cf_image_t data structure, so it should not free it, to avoid double-free crashes. This made the cfFilterImageToRaster() filter function (imagetoraster CUPS filter) crash.
  • cfImageOpenFP(): Removed leftover HAVE_LIBZ conditionals In the 3rd beta we have removed the dependency on libz from the build system as there is no explicit dependency on it in libcupsfilters. Having forgotten to remove HAVE_LIBZ from the conditionals in cfImageOpenFP() PNG images were rendered as blank pages. See cups-filters issue #465.
  • Compatibility with QPDF 11 and later
    • Replaced deprecated PointerHolder with shared_ptr (PR #13)
    • cfFilterPDFToPDF(): Replaced deprecated QPDF function name replaceOrRemoveKey by replaceKey.
    • Set CXXFLAGS="-DPOINTERHOLDER_TRANSITION=0" to silence QPDF warnings.
  • INSTALL: Explain dependencies (PR #10)


  • Transfer CUPS’ cupstestppd utility to ppdTest() library function The valuable tool got forgotten in the first place, now it is available as ppdTest() library function and testppdfile command line utility. The command line utility only gets installed with ./configure called with --enable-testppdfile argument.
  • In auto-generated PPDs do not set RGB default on mono printers (CUPS Issue #614) When a PPD for a driverless printer is generated by the ppdCreatePPDFromIPP() function and the get-printer-attributes IPP response gives “print-color-mode-default=auto” the PPD’s default setting for “ColorModel” is always “RGB”, even on monochrome printers, which makes printing fail on most devices. Now we ignore the “print-color-mode-default” if set to “auto”.
  • ppdLoadAttributes(): Added NULL check for missing PPD PageSize default Some PPDs, even “everywhere” PPDs generated by CUPS for a driverless IPP printer do not have a valid default value for the default page size, like “Unknown”. Added a NULL check to avoid a crash by such PPD files.
  • testppd: String got freed too early In this test program run by make check a string was used after already gotten freed. Discovered via a compiler warning, but program could have actually crashed.


  • Coverity check done by Zdenek Dohnal for the inclusion of libppd in Fedora and Red Hat. Zdenek has fixed all the issues: Missing free(), files not closed, potential string overflows, … Thanks a lot!
  • Change deprecated AC_PROG_LIBTOOL for LT_INIT (PR #12)