From: Michael R Sweet Date: Mon, 15 Apr 2019 20:50:04 +0000 (-0400) Subject: Add a workaround for old Samsung drivers (Issue #5562) X-Git-Tag: v2.3b8~55 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4c00fa533f99ed1b17fa14d33e2fd42c54c45bea;p=thirdparty%2Fcups.git Add a workaround for old Samsung drivers (Issue #5562) --- diff --git a/CHANGES.md b/CHANGES.md index 4cc5795c83..37a5d0fe2f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,8 @@ Changes in CUPS v2.3b8 - The lpadmin command would hang with a bad PPD file (rdar://41495016) - Fixed a potential crash bug in cups-driverd (rdar://46625579) - Fixed a performance regression with large PPDs (rdar://47040759) +- Restored minimal support for the `Emulators` keyword in PPD files to allow + old Samsung printer drivers to continue to work (Issue #5562) - The scheduler did not encode octetString values like "job-password" correctly for the print filters (Issue #5558) - The `cupsCheckDestSupported` function did not check octetString values diff --git a/cups/ppd.c b/cups/ppd.c index 8bda7c6a08..f958728cbb 100644 --- a/cups/ppd.c +++ b/cups/ppd.c @@ -1171,6 +1171,24 @@ _ppdOpen( else if (!strcmp(string, "Plus90")) ppd->landscape = 90; } + else if (!strcmp(keyword, "Emulators") && string && ppd->num_emulations == 0) + { + /* + * Issue #5562: Samsung printer drivers incorrectly use Emulators keyword + * to configure themselves + * + * The Emulators keyword was loaded but never used by anything in CUPS, + * and has no valid purpose in CUPS. The old code was removed due to a + * memory leak (Issue #5475), so the following (new) code supports a single + * name for the Emulators keyword, allowing these drivers to work until we + * remove PPD and driver support entirely in a future version of CUPS. + */ + + ppd->num_emulations = 1; + ppd->emulations = calloc(1, sizeof(ppd_emul_t)); + + strlcpy(ppd->emulations[0].name, string, sizeof(ppd->emulations[0].name)); + } else if (!strcmp(keyword, "JobPatchFile")) { /*