Fix integer overflow and heap OOB write errors Replaced stack-allocated Variable Length Arrays (VLAs) with dynamic heap allocations in write_flate to eliminate stack overflow vectors. Added robust integer overflow checks using unsigned long long when calculating expanded pixel sizes (header.cupsBytesPerLine * 6) and reject sizes exceeding INT_MAX early with Z_MEM_ERROR. Bug: 511640905 Test: Ensure printing still works Flag: EXEMPT BUGFIX Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:6a68ec5827c47b489ad6c0d618539a03b6c4a030 Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:000552a27da68d87c1151ea00d06b82cd0a06a07 Merged-In: I934add5868d832899dfebed68a1eff00f535e62d Change-Id: I934add5868d832899dfebed68a1eff00f535e62d
Looking for compile instructions? Read the file “INSTALL.md” instead...
CUPS is a standards-based, open-source printing system used by Apple's Mac OS® and other UNIX®-like operating systems, especially also Linux. CUPS uses the Internet Printing Protocol (“IPP”) and provides System V and Berkeley command-line interfaces, a web interface, and a C API to manage printers and print jobs.
CUPS 1.0 was released in early 2000 and since then and until CUPS 2.x PPD (PostScript Printer Description) files were used to describe the properties, features and user-settable options of printers. The development of PPD files (and also PostScript) was stopped by Adobe back in 1984, and Michael Sweet, author of CUPS, deprecated PPD files already ~10 years ago, seeking for a more modern alternative.
Introducing the concept of Printer Applications (emulations of driverless IPP printers, provides printer properties on get-printer-attributes IPP request) on the OpenPrinting Summit/PWG Meeting in May 2018, the replacement is there and PPD file support is going away in CUPS 3.x, to be released end-2023. This also means that libcups3 will not contain any PPD-file-supporting functions any more.
Currently, ~10000 printer models are supported with PPD-file-based classic CUPS drivers. Many drivers are even coming from the pre-CUPS era and got retro-fitted with Foomatic and its PPD file generator.
And these drivers are a huge code base and most of these old printers are not easily accessible for testing, converting these drivers into native Printer Applications by rewriting their code would be an unbearable and error-prone burden. Therefore a minimum-invasive retro-fitting method is needed, which simply encapsulates the drivers and PPD files as they are and therefore we still need to be able to handle PPD files (and also *.drv PPD generator files).
To avoid re-writing support for an obsolete format from scratch, only for retro-fitting legacy printer drivers we have created this package, libppd, the legacy support library for PPD files, which is by 95 % code overtaken from CUPS 2.x:
ppd/ppd.h)ppd/ppdc.h. code taken from the ppdc/ directory of CUPS 2.x source code)cups-driverd of CUPS 2.x (see ppd/ppd.h, for handling collections of PPD files in a driver package/Printer Application).ppd/ppd-filter.h).Currently, libppd is made use of for the following applications:
NOTE: LIBPPD IS ONLY FOR LEGACY PPD FILE SUPPORT! IT SHOULD NOT BE A MOTIVATION TO CREATE NEW PPD FILES OR NEW PPD EXTENSIONS!
As libppd is only for legacy PPD file support we do not plan to add any new features to it. Bug fixes will happen whenever needed though.
For compiling and using this package libcups of CUPS 2.2.2 or newer and libcupsfilters, version 2.0.0 or newer is needed. Of libcups no PPD-supporting functions are used, so porting libppd to use libcups3 should be rather easy (or it already works, not tested yet). Report bugs to
https://github.com/OpenPrinting/libppd/issues
See the “COPYING”, “LICENCE”, and “NOTICE” files for legal information. The license is the same as for CUPS, for a maximum of compatibility.