From 607f5e90660c171d26ba0f706079a5babb4c5cc9 Mon Sep 17 00:00:00 2001 From: Till Kamppeter Date: Tue, 5 Apr 2022 17:38:43 +0200 Subject: [PATCH] libcupsfilters: In pdftops() identify old LaserJets more precisely Old HP LaserJet printers have a firmware bug which makes them not working with Ghostscript's PostScript output, so in pdftops() we switch to Poppler for them. We consider an old LaserJet every "HP LaserJet XXXXY" printer with XXXX being a number (not preceded by a letter), typically 1-4 digits and Y being 0-2 letters, no separated from the numbers by a space. Unfortunately, we checked only whether after "LaserJet" comes a number and not the rest. This made also modern printers with names like "HP LaserJet 500 color M551" considered old and these modern printers have another PostScript interpreter bug which makes them not print some files with Poppler, so they need Ghostscript's PostScript output. Therefore we refine the check for the old-LaserJet quirk to see whether after the number are extra words and if so, this is again a modern printer and we do not switch to Poppler. See https://bugs.launchpad.net/bugs/1967816 --- cupsfilters/pdftops.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/cupsfilters/pdftops.c b/cupsfilters/pdftops.c index 900d3b1a2..1e8f5f03b 100644 --- a/cupsfilters/pdftops.c +++ b/cupsfilters/pdftops.c @@ -491,12 +491,17 @@ pdftops(int inputfd, /* I - File descriptor input stream */ if (isspace(*ptr)) continue; if (isdigit(*ptr)) { - if (log) log(ld, FILTER_LOGLEVEL_DEBUG, - "pdftops: Switching to Poppler's pdftops instead of " - "Ghostscript for old HP LaserJet (\"LaserJet " - "\", no letters before ) printers to " - "work around bugs in the printer's PS interpreters"); - renderer = PDFTOPS; + while (*ptr && isalnum(*ptr)) ptr ++; + if (!*ptr) /* End of string, no further word */ + { + if (log) log(ld, FILTER_LOGLEVEL_DEBUG, + "pdftops: Switching to Poppler's pdftops instead of " + "Ghostscript for old HP LaserJet (\"LaserJet " + "\", no letters before , no " + "additional words after ) printers to " + "work around bugs in the printer's PS interpreters"); + renderer = PDFTOPS; + } } break; } -- 2.47.3