summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
Diffstat (limited to 'filter')
-rw-r--r--filter/foomatic-rip/foomaticrip.c9
-rw-r--r--filter/imagetopdf.c2
-rw-r--r--filter/mupdftoraster.c2
-rw-r--r--filter/pdftops.c26
-rw-r--r--filter/sys5ippprinter.c2
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';
}