diff options
Diffstat (limited to 'filter')
-rw-r--r-- | filter/foomatic-rip/foomaticrip.c | 9 | ||||
-rw-r--r-- | filter/imagetopdf.c | 2 | ||||
-rw-r--r-- | filter/mupdftoraster.c | 2 | ||||
-rw-r--r-- | filter/pdftops.c | 26 | ||||
-rw-r--r-- | filter/sys5ippprinter.c | 2 |
5 files changed, 28 insertions, 13 deletions
diff --git a/filter/foomatic-rip/foomaticrip.c b/filter/foomatic-rip/foomaticrip.c index ed4ae1d00..3b27ce939 100644 --- a/filter/foomatic-rip/foomaticrip.c +++ b/filter/foomatic-rip/foomaticrip.c @@ -818,12 +818,13 @@ int main(int argc, char** argv) } if (getenv("PPD")) { - strncpy(job->ppdfile, getenv("PPD"), 2048); + strncpy(job->ppdfile, getenv("PPD"), sizeof(job->ppdfile) - 1); if (strlen(getenv("PPD")) > 2047) job->ppdfile[2047] = '\0'; spooler = SPOOLER_CUPS; if (getenv("CUPS_SERVERBIN")) { - strncpy(cupsfilterpath, getenv("CUPS_SERVERBIN"), sizeof(cupsfilterpath)); + strncpy(cupsfilterpath, getenv("CUPS_SERVERBIN"), + sizeof(cupsfilterpath) - 1); if (strlen(getenv("CUPS_SERVERBIN")) > PATH_MAX-1) cupsfilterpath[PATH_MAX-1] = '\0'; } @@ -845,13 +846,13 @@ int main(int argc, char** argv) /* PPD file name given via the command line allow duplicates, and use the last specified one */ while ((str = arglist_get_value(arglist, "-p"))) { - strncpy(job->ppdfile, str, 2048); + strncpy(job->ppdfile, str, sizeof(job->ppdfile) - 1); if (strlen(str) > 2047) job->ppdfile[2047] = '\0'; arglist_remove(arglist, "-p"); } while ((str = arglist_get_value(arglist, "--ppd"))) { - strncpy(job->ppdfile, str, 2048); + strncpy(job->ppdfile, str, sizeof(job->ppdfile) - 1); if (strlen(str) > 2047) job->ppdfile[2047] = '\0'; arglist_remove(arglist, "--ppd"); diff --git a/filter/imagetopdf.c b/filter/imagetopdf.c index 3c7bb6659..cc72cea02 100644 --- a/filter/imagetopdf.c +++ b/filter/imagetopdf.c @@ -745,7 +745,7 @@ main(int argc, /* I - Number of command-line arguments */ } else { - strncpy(filename, argv[6], sizeof(filename)); + strncpy(filename, argv[6], sizeof(filename) - 1); } /* diff --git a/filter/mupdftoraster.c b/filter/mupdftoraster.c index 8ba7a5743..75e2f7656 100644 --- a/filter/mupdftoraster.c +++ b/filter/mupdftoraster.c @@ -312,7 +312,7 @@ main (int argc, char **argv, char *envp[]) fprintf(stderr, "ERROR: Can't open input file %s\n",argv[6]); goto out; } - strncpy(infilename, argv[6], 1024); + strncpy(infilename, argv[6], sizeof(infilename) - 1); } /* If doc type is not PDF exit */ diff --git a/filter/pdftops.c b/filter/pdftops.c index f50ba63da..2ff74c6c4 100644 --- a/filter/pdftops.c +++ b/filter/pdftops.c @@ -406,7 +406,7 @@ main(int argc, /* I - Number of command-line args */ if ((val = cupsGetOption("make-and-model", num_options, options)) != NULL) { - strncpy(make_model, val, sizeof(make_model)); + strncpy(make_model, val, sizeof(make_model) - 1); if (strlen(val) > 127) make_model[127] = '\0'; for (ptr = make_model; *ptr; ptr ++) @@ -542,7 +542,7 @@ main(int argc, /* I - Number of command-line args */ * Force monochrome/grayscale PostScript output * if job is to be printed in monochrome/grayscale */ - if (ppd->color_device == 0) /* Monochrome printer */ + if (ppd && ppd->color_device == 0) /* Monochrome printer */ gray_output = 1; else /*Color Printer - user option for Grayscale */ { @@ -602,8 +602,9 @@ main(int argc, /* I - Number of command-line args */ if (gray_output == 1) /* Checking for monochrome/grayscale PostScript output */ { - pdf_argv[9] = (char *)"-sColorConversionStrategy=Gray"; - pdf_argc = 10; + pdf_argv[9] = (char *)"-sProcessColorModel=DeviceGray"; + pdf_argv[10] = (char *)"-sColorConversionStrategy=Gray"; + pdf_argc = 11; } else pdf_argc = 9; @@ -861,8 +862,21 @@ main(int argc, /* I - Number of command-line args */ #endif /* HAVE_POPPLER_PDFTOPS_WITH_RESOLUTION */ if (gray_output == 1) /* Checking for monochrome/grayscale PostScript output */ { - pdf_argv[1] = (char *)"-level1"; - pdf_argv[pdf_argc++] = (char *)"-optimizecolorspace"; + /* Poppler does not explicitly support turning colored PDF files into + grayscale PostScript. As a workaround, one could let the "pdftops" + command line utility generate PostScript level 1 output which is + always grayscale, but output files get huge and printing too + slow. + Recommended solution is to not use Poppler as PDF renderer for + printing, especially if one uses a color PostScript printer and + wants to have the possibility to print jobs also in grayscale. + See the use of the "pdftops-renderer" option in the README file. */ + /* Example code for PostScript level1 workaround: */ + /* pdf_argv[1] = (char *)"-level1"; + pdf_argv[pdf_argc++] = (char *)"-optimizecolorspace"; */ + /* Issue a warning message when printing a grayscale job with Poppler */ + fprintf(stderr, "WARNING: Grayscale/monochrome printing requested for this job but Poppler is not able to convert to grayscale/monochrome PostScript.\n"); + fprintf(stderr, "WARNING: Use \"pdftops-renderer\" option (see README file) to use Ghostscript or MuPDF for the PDF -> PostScript conversion.\n"); } pdf_argv[pdf_argc++] = filename; pdf_argv[pdf_argc++] = (char *)"-"; diff --git a/filter/sys5ippprinter.c b/filter/sys5ippprinter.c index 9a92c8e8e..6608e4749 100644 --- a/filter/sys5ippprinter.c +++ b/filter/sys5ippprinter.c @@ -661,7 +661,7 @@ exec_filters(cups_array_t *filters, /* I - Array of filters to run */ next = (char *)cupsArrayNext(filters); if (filter[0] == '/') { - strncpy(program, filter, sizeof(program)); + strncpy(program, filter, sizeof(program) - 1); if (strlen(filter) > 1023) program[1023] = '\0'; } |