Package init
This commit is contained in:
parent
33ebf433e9
commit
91169345e9
36
README.en.md
36
README.en.md
@ -1,36 +0,0 @@
|
||||
# cups-filters
|
||||
|
||||
#### Description
|
||||
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
|
||||
|
||||
#### Software Architecture
|
||||
Software architecture description
|
||||
|
||||
#### Installation
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Contribution
|
||||
|
||||
1. Fork the repository
|
||||
2. Create Feat_xxx branch
|
||||
3. Commit your code
|
||||
4. Create Pull Request
|
||||
|
||||
|
||||
#### Gitee Feature
|
||||
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
39
README.md
39
README.md
@ -1,39 +0,0 @@
|
||||
# cups-filters
|
||||
|
||||
#### 介绍
|
||||
{**以下是码云平台说明,您可以替换此简介**
|
||||
码云是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
|
||||
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
|
||||
|
||||
#### 软件架构
|
||||
软件架构说明
|
||||
|
||||
|
||||
#### 安装教程
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### 使用说明
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### 参与贡献
|
||||
|
||||
1. Fork 本仓库
|
||||
2. 新建 Feat_xxx 分支
|
||||
3. 提交代码
|
||||
4. 新建 Pull Request
|
||||
|
||||
|
||||
#### 码云特技
|
||||
|
||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
||||
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
|
||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
|
||||
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
|
||||
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
||||
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
BIN
cups-filters-1.20.3.tar.xz
Normal file
BIN
cups-filters-1.20.3.tar.xz
Normal file
Binary file not shown.
11
cups-filters-cleareof.patch
Normal file
11
cups-filters-cleareof.patch
Normal file
@ -0,0 +1,11 @@
|
||||
diff -up cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c.cleareof cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c
|
||||
--- cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c.cleareof 2018-09-21 13:38:05.882666106 +0200
|
||||
+++ cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c 2018-09-21 13:38:55.330277816 +0200
|
||||
@@ -663,6 +663,7 @@ int print_file(const char *filename, int
|
||||
rip_die(EXIT_PRNERR_NORETRY_BAD_SETTINGS,
|
||||
"Couldn't dup stdout of pdf-to-ps\n");
|
||||
|
||||
+ clearerr(stdin);
|
||||
ret = print_file("<STDIN>", 0);
|
||||
|
||||
wait_for_process(renderer_pid);
|
||||
678
cups-filters-covscan.patch
Normal file
678
cups-filters-covscan.patch
Normal file
@ -0,0 +1,678 @@
|
||||
diff --git a/backend/beh.c b/backend/beh.c
|
||||
index 9ba6613..7514e33 100644
|
||||
--- a/backend/beh.c
|
||||
+++ b/backend/beh.c
|
||||
@@ -223,6 +223,8 @@ call_backend(char *uri, /* I - URI of final destination */
|
||||
*/
|
||||
|
||||
strncpy(scheme, uri, sizeof(scheme));
|
||||
+ if (strlen(uri) > 1023)
|
||||
+ scheme[1023] = '\0';
|
||||
if ((ptr = strchr(scheme, ':')) != NULL)
|
||||
*ptr = '\0';
|
||||
|
||||
diff --git a/backend/implicitclass.c b/backend/implicitclass.c
|
||||
index 3ce4d10..1593191 100644
|
||||
--- a/backend/implicitclass.c
|
||||
+++ b/backend/implicitclass.c
|
||||
@@ -104,6 +104,8 @@ main(int argc, /* I - Number of command-line args */
|
||||
}
|
||||
ptr1 ++;
|
||||
strncpy(queue_name, ptr1, sizeof(queue_name));
|
||||
+ if (strlen(ptr1) > 1023)
|
||||
+ queue_name[1023] = '\0';
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
|
||||
"localhost", ippPort(), "/printers/%s", queue_name);
|
||||
job_id = argv[1];
|
||||
@@ -162,6 +164,8 @@ main(int argc, /* I - Number of command-line args */
|
||||
/* Read destination host name (or message) and check whether it is
|
||||
complete (second double quote) */
|
||||
strncpy(dest_host, ptr1, sizeof(dest_host));
|
||||
+ if (strlen(ptr1) > 1023)
|
||||
+ dest_host[1023] = '\0';
|
||||
ptr1 = dest_host;
|
||||
if ((ptr2 = strchr(ptr1, '"')) != NULL) {
|
||||
*ptr2 = '\0';
|
||||
diff --git a/cupsfilters/colormanager.c b/cupsfilters/colormanager.c
|
||||
index 70074a3..a4a929d 100644
|
||||
--- a/cupsfilters/colormanager.c
|
||||
+++ b/cupsfilters/colormanager.c
|
||||
@@ -272,6 +272,9 @@ _get_colord_profile(const char *printer_name, /* Dest name */
|
||||
free(qualifier);
|
||||
}
|
||||
|
||||
+ if (icc_profile != NULL)
|
||||
+ free(icc_profile);
|
||||
+
|
||||
return is_profile_set;
|
||||
|
||||
}
|
||||
@@ -325,8 +328,11 @@ _get_ppd_icc_fallback (ppd_file_t *ppd, char **qualifier)
|
||||
if (attr->value[0] != '/')
|
||||
snprintf(full_path, sizeof(full_path),
|
||||
"%s/profiles/%s", CUPSDATA, attr->value);
|
||||
- else
|
||||
+ else {
|
||||
strncpy(full_path, attr->value, sizeof(full_path));
|
||||
+ if (strlen(attr->value) > 1023)
|
||||
+ full_path[1023] = '\0';
|
||||
+ }
|
||||
|
||||
/* check the file exists */
|
||||
if (access(full_path, 0)) {
|
||||
diff --git a/cupsfilters/image-sgilib.c b/cupsfilters/image-sgilib.c
|
||||
index 0b70c13..bf2dd80 100644
|
||||
--- a/cupsfilters/image-sgilib.c
|
||||
+++ b/cupsfilters/image-sgilib.c
|
||||
@@ -282,7 +282,7 @@ sgiOpenFile(FILE *file, /* I - File to open */
|
||||
sgip->mode = SGI_WRITE;
|
||||
|
||||
putshort(SGI_MAGIC, sgip->file);
|
||||
- putc((sgip->comp = comp) != 0, sgip->file);
|
||||
+ putc(((sgip->comp = comp) != 0) ? '1': '0', sgip->file);
|
||||
putc(sgip->bpp = bpp, sgip->file);
|
||||
putshort(3, sgip->file); /* Dimensions */
|
||||
putshort(sgip->xsize = xsize, sgip->file);
|
||||
diff --git a/cupsfilters/image-sun.c b/cupsfilters/image-sun.c
|
||||
index 609b194..989d039 100644
|
||||
--- a/cupsfilters/image-sun.c
|
||||
+++ b/cupsfilters/image-sun.c
|
||||
@@ -114,6 +114,7 @@ _cupsImageReadSunRaster(
|
||||
ras_depth == 0 || ras_depth > 32)
|
||||
{
|
||||
fputs("DEBUG: Raster image cannot be loaded!\n", stderr);
|
||||
+ fclose(fp);
|
||||
return (1);
|
||||
}
|
||||
|
||||
diff --git a/cupsfilters/ppdgenerator.c b/cupsfilters/ppdgenerator.c
|
||||
index 052e3c5..3bc4d8a 100644
|
||||
--- a/cupsfilters/ppdgenerator.c
|
||||
+++ b/cupsfilters/ppdgenerator.c
|
||||
@@ -937,6 +937,10 @@ load_opt_strings_catalog(const char *location, cups_array_t *options)
|
||||
}
|
||||
}
|
||||
cupsFileClose(fp);
|
||||
+ if (choice_name != NULL)
|
||||
+ free(choice_name);
|
||||
+ if (opt_name != NULL)
|
||||
+ free(opt_name);
|
||||
if (filename == tmpfile)
|
||||
unlink(filename);
|
||||
}
|
||||
diff --git a/cupsfilters/raster.c b/cupsfilters/raster.c
|
||||
index 8203690..67d6b9b 100644
|
||||
--- a/cupsfilters/raster.c
|
||||
+++ b/cupsfilters/raster.c
|
||||
@@ -151,11 +151,14 @@ cupsRasterParseIPPOptions(cups_page_header2_t *h, /* I - Raster header */
|
||||
strcasestr(s, "right") ||
|
||||
strcasestr(s, "side") ||
|
||||
strcasestr(s, "main"))
|
||||
- media_source = strdup(s);
|
||||
+ {
|
||||
+ if (media_source == NULL)
|
||||
+ media_source = strdup(s);
|
||||
+ }
|
||||
else
|
||||
media_type = strdup(s);
|
||||
}
|
||||
- if (size_found)
|
||||
+ if (page_size == NULL && size_found)
|
||||
page_size = strdup(size_found->pwg);
|
||||
}
|
||||
}
|
||||
@@ -1079,6 +1082,13 @@ cupsRasterParseIPPOptions(cups_page_header2_t *h, /* I - Raster header */
|
||||
h->cupsRenderingIntent[0] = '\0';
|
||||
#endif /* HAVE_CUPS_1_7 */
|
||||
|
||||
+ if (media_source != NULL)
|
||||
+ free(media_source);
|
||||
+ if (media_type != NULL)
|
||||
+ free(media_type);
|
||||
+ if (page_size != NULL)
|
||||
+ free(page_size);
|
||||
+
|
||||
return (0);
|
||||
}
|
||||
|
||||
diff --git a/filter/bannertopdf.c b/filter/bannertopdf.c
|
||||
index b78ea37..2b9bd76 100644
|
||||
--- a/filter/bannertopdf.c
|
||||
+++ b/filter/bannertopdf.c
|
||||
@@ -513,6 +513,15 @@ static int generate_banner_pdf(banner_t *banner,
|
||||
pdf_duplicate_page(doc, 1, copies);
|
||||
|
||||
pdf_write(doc, stdout);
|
||||
+
|
||||
+ opt_t * opt_current = known_opts;
|
||||
+ opt_t * opt_next = NULL;
|
||||
+ while (opt_current != NULL)
|
||||
+ {
|
||||
+ opt_next = opt_current->next;
|
||||
+ free(opt_current);
|
||||
+ opt_current = opt_next;
|
||||
+ }
|
||||
free(buf);
|
||||
pdf_free(doc);
|
||||
return 0;
|
||||
diff --git a/filter/foomatic-rip/foomaticrip.c b/filter/foomatic-rip/foomaticrip.c
|
||||
index 2a642ed..13d2035 100644
|
||||
--- a/filter/foomatic-rip/foomaticrip.c
|
||||
+++ b/filter/foomatic-rip/foomaticrip.c
|
||||
@@ -666,6 +666,11 @@ int print_file(const char *filename, int convert)
|
||||
ret = print_file("<STDIN>", 0);
|
||||
|
||||
wait_for_process(renderer_pid);
|
||||
+ if (in != NULL)
|
||||
+ fclose(in);
|
||||
+ if (out != NULL)
|
||||
+ fclose(out);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -683,6 +688,8 @@ int print_file(const char *filename, int convert)
|
||||
|
||||
case UNKNOWN_FILE:
|
||||
_log("Cannot process \"%s\": Unknown filetype.\n", filename);
|
||||
+ if (file != NULL)
|
||||
+ fclose(file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -811,10 +818,14 @@ int main(int argc, char** argv)
|
||||
|
||||
if (getenv("PPD")) {
|
||||
strncpy(job->ppdfile, getenv("PPD"), 2048);
|
||||
+ if (strlen(getenv("PPD")) > 2047)
|
||||
+ job->ppdfile[2047] = '\0';
|
||||
spooler = SPOOLER_CUPS;
|
||||
- if (getenv("CUPS_SERVERBIN"))
|
||||
- strncpy(cupsfilterpath, getenv("CUPS_SERVERBIN"),
|
||||
- sizeof(cupsfilterpath));
|
||||
+ if (getenv("CUPS_SERVERBIN")) {
|
||||
+ strncpy(cupsfilterpath, getenv("CUPS_SERVERBIN"), sizeof(cupsfilterpath));
|
||||
+ if (strlen(getenv("CUPS_SERVERBIN")) > PATH_MAX-1)
|
||||
+ cupsfilterpath[PATH_MAX-1] = '\0';
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Check status of printer color management from the color manager */
|
||||
@@ -834,10 +845,14 @@ int main(int argc, char** argv)
|
||||
allow duplicates, and use the last specified one */
|
||||
while ((str = arglist_get_value(arglist, "-p"))) {
|
||||
strncpy(job->ppdfile, str, 2048);
|
||||
+ if (strlen(str) > 2047)
|
||||
+ job->ppdfile[2047] = '\0';
|
||||
arglist_remove(arglist, "-p");
|
||||
}
|
||||
while ((str = arglist_get_value(arglist, "--ppd"))) {
|
||||
strncpy(job->ppdfile, str, 2048);
|
||||
+ if (strlen(str) > 2047)
|
||||
+ job->ppdfile[2047] = '\0';
|
||||
arglist_remove(arglist, "--ppd");
|
||||
}
|
||||
|
||||
@@ -1020,6 +1035,7 @@ int main(int argc, char** argv)
|
||||
cmd[0] = '\0';
|
||||
|
||||
snprintf(gstoraster, sizeof(gstoraster), "gs -dQUIET -dDEBUG -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOINTERPOLATE -dNOMEDIAATTRS -sDEVICE=cups -dShowAcroForm %s -sOutputFile=- -", cmd);
|
||||
+ free(icc_profile);
|
||||
}
|
||||
|
||||
/* build Ghostscript/CUPS driver command line */
|
||||
diff --git a/filter/foomatic-rip/options.c b/filter/foomatic-rip/options.c
|
||||
index 325a0a6..798ddf9 100644
|
||||
--- a/filter/foomatic-rip/options.c
|
||||
+++ b/filter/foomatic-rip/options.c
|
||||
@@ -1031,12 +1031,10 @@ int option_set_value(option_t *opt, int optionset, const char *value)
|
||||
/* TODO only set the changed option, not all of them */
|
||||
choice = option_find_choice(fromopt,
|
||||
option_get_value(fromopt, optionset));
|
||||
-
|
||||
composite_set_values(fromopt, optionset, choice->command);
|
||||
- }
|
||||
- else {
|
||||
+ free(newvalue);
|
||||
+ } else
|
||||
val->value = newvalue;
|
||||
- }
|
||||
|
||||
if (option_is_composite(opt)) {
|
||||
/* set dependent values */
|
||||
@@ -1914,6 +1912,8 @@ int ppd_supports_pdf()
|
||||
if (startswith(cmd, "gs"))
|
||||
{
|
||||
strncpy(cmd_pdf, cmd, 4096);
|
||||
+ if (strlen(cmd) > 4095)
|
||||
+ cmd_pdf[4095] = '\0';
|
||||
return 1;
|
||||
}
|
||||
|
||||
diff --git a/filter/foomatic-rip/spooler.c b/filter/foomatic-rip/spooler.c
|
||||
index 236551f..4f27563 100644
|
||||
--- a/filter/foomatic-rip/spooler.c
|
||||
+++ b/filter/foomatic-rip/spooler.c
|
||||
@@ -94,6 +94,8 @@ void init_cups(list_t *arglist, dstr_t *filelist, jobparams_t *job)
|
||||
CUPS puts the print queue name into the PRINTER environment variable
|
||||
when calling filters. */
|
||||
strncpy(job->printer, getenv("PRINTER"), 256);
|
||||
+ if (strlen(getenv("PRINTER")) > 255)
|
||||
+ job->printer[255] = '\0';
|
||||
|
||||
free(cups_options);
|
||||
}
|
||||
diff --git a/filter/pdftops.c b/filter/pdftops.c
|
||||
index 55d2ec1..a648444 100644
|
||||
--- a/filter/pdftops.c
|
||||
+++ b/filter/pdftops.c
|
||||
@@ -427,6 +427,8 @@ 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));
|
||||
+ if (strlen(val) > 127)
|
||||
+ make_model[127] = '\0';
|
||||
for (ptr = make_model; *ptr; ptr ++)
|
||||
if (*ptr == '-') *ptr = ' ';
|
||||
}
|
||||
diff --git a/filter/pdftoraster.cxx b/filter/pdftoraster.cxx
|
||||
index 4cd656a..0c63ab8 100644
|
||||
--- a/filter/pdftoraster.cxx
|
||||
+++ b/filter/pdftoraster.cxx
|
||||
@@ -558,8 +558,10 @@ static void parseOpts(int argc, char **argv)
|
||||
if (!cm_disabled)
|
||||
cmGetPrinterIccProfile(getenv("PRINTER"), &profile, ppd);
|
||||
|
||||
- if (profile != NULL)
|
||||
- colorProfile = cmsOpenProfileFromFile(profile,"r");
|
||||
+ if (profile != NULL) {
|
||||
+ colorProfile = cmsOpenProfileFromFile(profile,"r");
|
||||
+ free(profile);
|
||||
+ }
|
||||
|
||||
#ifdef HAVE_CUPS_1_7
|
||||
if ((attr = ppdFindAttr(ppd,"PWGRaster",0)) != 0 &&
|
||||
diff --git a/filter/rastertoescpx.c b/filter/rastertoescpx.c
|
||||
index 5a3e5df..a0ec416 100644
|
||||
--- a/filter/rastertoescpx.c
|
||||
+++ b/filter/rastertoescpx.c
|
||||
@@ -1141,7 +1141,10 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */
|
||||
}
|
||||
}
|
||||
else
|
||||
+ {
|
||||
free(DotBuffers[0]);
|
||||
+ DotBuffers[0] = NULL;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Output a page eject sequence...
|
||||
@@ -1440,7 +1443,7 @@ CompressData(ppd_file_t *ppd, /* I - PPD file information */
|
||||
|
||||
printf("\033i");
|
||||
putchar(ctable[PrinterPlanes - 1][plane]);
|
||||
- putchar(type != 0);
|
||||
+ putchar((type != 0) ? '1': '0');
|
||||
putchar(BitPlanes);
|
||||
putchar(bytes & 255);
|
||||
putchar(bytes >> 8);
|
||||
@@ -1470,7 +1473,7 @@ CompressData(ppd_file_t *ppd, /* I - PPD file information */
|
||||
bytes *= 8;
|
||||
|
||||
printf("\033.");
|
||||
- putchar(type != 0);
|
||||
+ putchar((type != 0) ? '1': '0');
|
||||
putchar(ystep);
|
||||
putchar(xstep);
|
||||
putchar(rows);
|
||||
@@ -1907,6 +1910,10 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
if (fd != 0)
|
||||
close(fd);
|
||||
|
||||
+ for (int i = 0; i < 7; i++)
|
||||
+ if (DotBuffers[i] != NULL)
|
||||
+ free(DotBuffers[i]);
|
||||
+
|
||||
return (page == 0);
|
||||
}
|
||||
|
||||
diff --git a/filter/rastertops.c b/filter/rastertops.c
|
||||
index d5d955b..531eb70 100644
|
||||
--- a/filter/rastertops.c
|
||||
+++ b/filter/rastertops.c
|
||||
@@ -282,6 +282,8 @@ write_flate(cups_raster_t *ras, /* I - Image data */
|
||||
if (fwrite(out, 1, have, stdout) != have)
|
||||
{
|
||||
(void)deflateEnd(&strm);
|
||||
+ if (convertedpix != NULL)
|
||||
+ free(convertedpix);
|
||||
return Z_ERRNO;
|
||||
}
|
||||
} while (strm.avail_out == 0);
|
||||
diff --git a/filter/sys5ippprinter.c b/filter/sys5ippprinter.c
|
||||
index ad75551..9a92c8e 100644
|
||||
--- a/filter/sys5ippprinter.c
|
||||
+++ b/filter/sys5ippprinter.c
|
||||
@@ -570,6 +570,8 @@ exec_filter(const char *filter, /* I - Filter to execute */
|
||||
dup2(fd, 2);
|
||||
close(fd);
|
||||
}
|
||||
+ else
|
||||
+ close(fd);
|
||||
fcntl(2, F_SETFL, O_NDELAY);
|
||||
}
|
||||
|
||||
@@ -578,6 +580,8 @@ exec_filter(const char *filter, /* I - Filter to execute */
|
||||
dup2(fd, 3);
|
||||
close(fd);
|
||||
}
|
||||
+ else
|
||||
+ close(fd);
|
||||
fcntl(3, F_SETFL, O_NDELAY);
|
||||
|
||||
if ((fd = open("/dev/null", O_RDWR)) > 4)
|
||||
@@ -585,6 +589,8 @@ exec_filter(const char *filter, /* I - Filter to execute */
|
||||
dup2(fd, 4);
|
||||
close(fd);
|
||||
}
|
||||
+ else
|
||||
+ close(fd);
|
||||
fcntl(4, F_SETFL, O_NDELAY);
|
||||
|
||||
/*
|
||||
@@ -654,8 +660,11 @@ exec_filters(cups_array_t *filters, /* I - Array of filters to run */
|
||||
{
|
||||
next = (char *)cupsArrayNext(filters);
|
||||
|
||||
- if (filter[0] == '/')
|
||||
+ if (filter[0] == '/') {
|
||||
strncpy(program, filter, sizeof(program));
|
||||
+ if (strlen(filter) > 1023)
|
||||
+ program[1023] = '\0';
|
||||
+ }
|
||||
else
|
||||
{
|
||||
if ((cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL)
|
||||
diff --git a/utils/cups-browsed.c b/utils/cups-browsed.c
|
||||
index a2a4a08..19a2ac8 100644
|
||||
--- a/utils/cups-browsed.c
|
||||
+++ b/utils/cups-browsed.c
|
||||
@@ -2245,7 +2245,10 @@ is_disabled(const char *printer, const char *reason) {
|
||||
pstate = (ipp_pstate_t)ippGetInteger(attr, 0);
|
||||
else if (!strcmp(ippGetName(attr), "printer-state-message") &&
|
||||
ippGetValueTag(attr) == IPP_TAG_TEXT) {
|
||||
- free(pstatemsg);
|
||||
+ if (pstatemsg != NULL) {
|
||||
+ free(pstatemsg);
|
||||
+ pstatemsg = NULL;
|
||||
+ }
|
||||
p = ippGetString(attr, 0, NULL);
|
||||
if (p != NULL) pstatemsg = strdup(p);
|
||||
}
|
||||
@@ -2262,16 +2265,22 @@ is_disabled(const char *printer, const char *reason) {
|
||||
case IPP_PRINTER_IDLE:
|
||||
case IPP_PRINTER_PROCESSING:
|
||||
ippDelete(response);
|
||||
- free(pstatemsg);
|
||||
+ if (pstatemsg != NULL) {
|
||||
+ free(pstatemsg);
|
||||
+ pstatemsg = NULL;
|
||||
+ }
|
||||
return NULL;
|
||||
case IPP_PRINTER_STOPPED:
|
||||
ippDelete(response);
|
||||
if (reason == NULL)
|
||||
return pstatemsg;
|
||||
- else if (strcasestr(pstatemsg, reason) != NULL)
|
||||
+ else if (pstatemsg != NULL && (strcasestr(pstatemsg, reason) != NULL))
|
||||
return pstatemsg;
|
||||
else {
|
||||
- free(pstatemsg);
|
||||
+ if (pstatemsg != NULL) {
|
||||
+ free(pstatemsg);
|
||||
+ pstatemsg = NULL;
|
||||
+ }
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -2280,12 +2289,18 @@ is_disabled(const char *printer, const char *reason) {
|
||||
debug_printf("No information regarding enabled/disabled found about the requested printer '%s'\n",
|
||||
printer);
|
||||
ippDelete(response);
|
||||
- free(pstatemsg);
|
||||
+ if (pstatemsg != NULL) {
|
||||
+ free(pstatemsg);
|
||||
+ pstatemsg = NULL;
|
||||
+ }
|
||||
return NULL;
|
||||
}
|
||||
debug_printf("ERROR: Request for printer info failed: %s\n",
|
||||
cupsLastErrorString());
|
||||
- free(pstatemsg);
|
||||
+ if (pstatemsg != NULL) {
|
||||
+ free(pstatemsg);
|
||||
+ pstatemsg = NULL;
|
||||
+ }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -3040,6 +3055,8 @@ on_printer_state_changed (CupsNotifier *object,
|
||||
dest_host = p->ip ? p->ip : p->host;
|
||||
dest_port = p->port;
|
||||
strncpy(dest_name, remote_cups_queue, sizeof(dest_name));
|
||||
+ if (strlen(remote_cups_queue) > 1023)
|
||||
+ dest_name[1023] = '\0';
|
||||
dest_index = i;
|
||||
debug_printf("Printer %s on host %s, port %d is idle, take this as destination and stop searching.\n",
|
||||
remote_cups_queue, p->host, p->port);
|
||||
@@ -3056,8 +3073,9 @@ on_printer_state_changed (CupsNotifier *object,
|
||||
min_jobs = num_jobs;
|
||||
dest_host = p->ip ? p->ip : p->host;
|
||||
dest_port = p->port;
|
||||
- strncpy(dest_name, remote_cups_queue,
|
||||
- sizeof(dest_name));
|
||||
+ strncpy(dest_name, remote_cups_queue, sizeof(dest_name));
|
||||
+ if (strlen(remote_cups_queue) > 1023)
|
||||
+ dest_name[1023] = '\0';
|
||||
dest_index = i;
|
||||
}
|
||||
debug_printf("Printer %s on host %s, port %d is printing and it has %d jobs.\n",
|
||||
@@ -3566,8 +3584,9 @@ create_remote_printer_entry (const char *queue_name,
|
||||
IPP_TAG_KEYWORD)) != NULL) {
|
||||
debug_printf(" Attr: %s\n", ippGetName(attr));
|
||||
for (i = 0; i < ippGetCount(attr); i ++) {
|
||||
- strncpy(valuebuffer, ippGetString(attr, i, NULL),
|
||||
- sizeof(valuebuffer));
|
||||
+ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer));
|
||||
+ if (strlen(ippGetString(attr, i, NULL)) > 65535)
|
||||
+ valuebuffer[65535] = '\0';
|
||||
debug_printf(" Keyword: %s\n", valuebuffer);
|
||||
if (valuebuffer[0] > '1')
|
||||
break;
|
||||
@@ -3598,8 +3617,9 @@ create_remote_printer_entry (const char *queue_name,
|
||||
debug_printf(" Value: %s\n", valuebuffer);
|
||||
if (valuebuffer[0] == '\0') {
|
||||
for (i = 0; i < ippGetCount(attr); i ++) {
|
||||
- strncpy(valuebuffer, ippGetString(attr, i, NULL),
|
||||
- sizeof(valuebuffer));
|
||||
+ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer));
|
||||
+ if (strlen(ippGetString(attr, i, NULL)) > 65535)
|
||||
+ valuebuffer[65535] = '\0';
|
||||
debug_printf(" Keyword: %s\n", valuebuffer);
|
||||
if (valuebuffer[0] != '\0')
|
||||
break;
|
||||
@@ -3629,8 +3649,9 @@ create_remote_printer_entry (const char *queue_name,
|
||||
debug_printf(" Value: %s\n", valuebuffer);
|
||||
if (valuebuffer[0] == '\0') {
|
||||
for (i = 0; i < ippGetCount(attr); i ++) {
|
||||
- strncpy(valuebuffer, ippGetString(attr, i, NULL),
|
||||
- sizeof(valuebuffer));
|
||||
+ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer));
|
||||
+ if (strlen(ippGetString(attr, i, NULL)) > 65535)
|
||||
+ valuebuffer[65535] = '\0';
|
||||
debug_printf(" Keyword: %s\n", valuebuffer);
|
||||
if (valuebuffer[0] != '\0')
|
||||
break;
|
||||
@@ -3663,8 +3684,9 @@ create_remote_printer_entry (const char *queue_name,
|
||||
debug_printf(" Value: %s\n", p->queue_name, valuebuffer);
|
||||
if (valuebuffer[0] == '\0') {
|
||||
for (i = 0; i < ippGetCount(attr); i ++) {
|
||||
- strncpy(valuebuffer, ippGetString(attr, i, NULL),
|
||||
- sizeof(valuebuffer));
|
||||
+ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer));
|
||||
+ if (strlen(ippGetString(attr, i, NULL)) > 65535)
|
||||
+ valuebuffer[65535] = '\0';
|
||||
debug_printf(" Keyword: %s\n", valuebuffer);
|
||||
if (valuebuffer[0] != '\0')
|
||||
break;
|
||||
@@ -4498,6 +4520,8 @@ gboolean update_cups_queues(gpointer unused) {
|
||||
} else {
|
||||
/* Device URI: ipp(s)://<remote host>:631/printers/<remote queue> */
|
||||
strncpy(device_uri, p->uri, sizeof(device_uri));
|
||||
+ if (strlen(p->uri) > HTTP_MAX_URI-1)
|
||||
+ device_uri[HTTP_MAX_URI-1] = '\0';
|
||||
debug_printf("Print queue %s is for an IPP network printer, or we do not get notifications from CUPS, using direct device URI %s\n",
|
||||
p->queue_name, device_uri);
|
||||
}
|
||||
@@ -4606,6 +4630,8 @@ gboolean update_cups_queues(gpointer unused) {
|
||||
} else if (!strncmp(line, "*Default", 8)) {
|
||||
cont_line_read = 0;
|
||||
strncpy(keyword, line + 8, sizeof(keyword));
|
||||
+ if ((strlen(line) + 8) > 1023)
|
||||
+ keyword[1023] = '\0';
|
||||
for (keyptr = keyword; *keyptr; keyptr ++)
|
||||
if (*keyptr == ':' || isspace(*keyptr & 255))
|
||||
break;
|
||||
@@ -7144,7 +7170,7 @@ read_configuration (const char *filename)
|
||||
in the configuration file is used. */
|
||||
while ((i < cupsArrayCount(command_line_config) &&
|
||||
(value = cupsArrayIndex(command_line_config, i++)) &&
|
||||
- strncpy(line, value, sizeof(line))) ||
|
||||
+ strncpy(line, value, sizeof(line)) && ((strlen(value) > HTTP_MAX_BUFFER-1)? line[HTTP_MAX_BUFFER-1] = '\0': 1)) ||
|
||||
cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) {
|
||||
if (linenum < 0) {
|
||||
/* We are still reading options from the command line ("-o ..."),
|
||||
@@ -7371,6 +7397,7 @@ read_configuration (const char *filename)
|
||||
if (filter->cregexp)
|
||||
regfree(filter->cregexp);
|
||||
free(filter);
|
||||
+ filter = NULL;
|
||||
}
|
||||
} else if ((!strcasecmp(line, "BrowseInterval") || !strcasecmp(line, "BrowseTimeout")) && value) {
|
||||
int t = atoi(value);
|
||||
@@ -7386,8 +7413,11 @@ read_configuration (const char *filename)
|
||||
debug_printf("Invalid %s value: %d\n",
|
||||
line, t);
|
||||
} else if (!strcasecmp(line, "DomainSocket") && value) {
|
||||
- if (value[0] != '\0')
|
||||
+ if (value[0] != '\0') {
|
||||
+ if (DomainSocket != NULL)
|
||||
+ free(DomainSocket);
|
||||
DomainSocket = strdup(value);
|
||||
+ }
|
||||
} else if ((!strcasecmp(line, "HttpLocalTimeout") || !strcasecmp(line, "HttpRemoteTimeout")) && value) {
|
||||
int t = atoi(value);
|
||||
if (t >= 0) {
|
||||
@@ -7555,6 +7585,10 @@ read_configuration (const char *filename)
|
||||
}
|
||||
}
|
||||
cupsArrayAdd (clusters, cluster);
|
||||
+ if (start != NULL) {
|
||||
+ free(start);
|
||||
+ start = NULL;
|
||||
+ }
|
||||
continue;
|
||||
cluster_fail:
|
||||
if (cluster) {
|
||||
@@ -7568,6 +7602,11 @@ read_configuration (const char *filename)
|
||||
cupsArrayDelete (cluster->members);
|
||||
}
|
||||
free(cluster);
|
||||
+ cluster = NULL;
|
||||
+ }
|
||||
+ if (start != NULL) {
|
||||
+ free(start);
|
||||
+ start = NULL;
|
||||
}
|
||||
} else if (!strcasecmp(line, "LoadBalancing") && value) {
|
||||
if (!strncasecmp(value, "QueueOnClient", 13))
|
||||
@@ -7575,7 +7614,7 @@ read_configuration (const char *filename)
|
||||
else if (!strncasecmp(value, "QueueOnServers", 14))
|
||||
LoadBalancingType = QUEUE_ON_SERVERS;
|
||||
} else if (!strcasecmp(line, "DefaultOptions") && value) {
|
||||
- if (strlen(value) > 0)
|
||||
+ if (DefaultOptions == NULL && strlen(value) > 0)
|
||||
DefaultOptions = strdup(value);
|
||||
} else if (!strcasecmp(line, "AutoShutdown") && value) {
|
||||
char *p, *saveptr;
|
||||
@@ -7949,10 +7988,12 @@ int main(int argc, char*argv[]) {
|
||||
daemon, not with remote ones. */
|
||||
if (getenv("CUPS_SERVER") != NULL) {
|
||||
strncpy(local_server_str, getenv("CUPS_SERVER"), sizeof(local_server_str));
|
||||
+ if (strlen(getenv("CUPS_SERVER")) > 1023)
|
||||
+ local_server_str[1023] = '\0';
|
||||
} else {
|
||||
#ifdef CUPS_DEFAULT_DOMAINSOCKET
|
||||
if (DomainSocket == NULL)
|
||||
- DomainSocket = CUPS_DEFAULT_DOMAINSOCKET;
|
||||
+ DomainSocket = strdup(CUPS_DEFAULT_DOMAINSOCKET);
|
||||
#endif
|
||||
if (DomainSocket != NULL) {
|
||||
struct stat sockinfo; /* Domain socket information */
|
||||
@@ -8293,6 +8334,11 @@ fail:
|
||||
if (debug_logfile == 1)
|
||||
stop_debug_logging();
|
||||
|
||||
+ if (DefaultOptions != NULL)
|
||||
+ free(DefaultOptions);
|
||||
+ if (DomainSocket != NULL)
|
||||
+ free(DomainSocket);
|
||||
+
|
||||
return ret;
|
||||
|
||||
help:
|
||||
diff --git a/utils/driverless.c b/utils/driverless.c
|
||||
index 7fc6dae..fe61e58 100644
|
||||
--- a/utils/driverless.c
|
||||
+++ b/utils/driverless.c
|
||||
@@ -227,12 +227,16 @@ list_printers (int mode)
|
||||
|
||||
if (txt_usb_mfg[0] != '\0') {
|
||||
strncpy(make, txt_usb_mfg, sizeof(make));
|
||||
+ if (strlen(txt_usb_mfg) > 511)
|
||||
+ make[511] = '\0';
|
||||
ptr = device_id + strlen(device_id);
|
||||
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id),
|
||||
"MFG:%s;", txt_usb_mfg);
|
||||
}
|
||||
if (txt_usb_mdl[0] != '\0') {
|
||||
strncpy(model, txt_usb_mdl, sizeof(model));
|
||||
+ if (strlen(txt_usb_mdl) > 255)
|
||||
+ model[255] = '\0';
|
||||
ptr = device_id + strlen(device_id);
|
||||
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id),
|
||||
"MDL:%s;", txt_usb_mdl);
|
||||
@@ -243,15 +247,22 @@ list_printers (int mode)
|
||||
*ptr == ')')
|
||||
*ptr = '\0';
|
||||
strncpy(model, txt_product + 1, sizeof(model));
|
||||
+ if ((strlen(txt_product) + 1) > 255)
|
||||
+ model[255] = '\0';
|
||||
} else
|
||||
strncpy(model, txt_product, sizeof(model));
|
||||
} else if (txt_ty[0] != '\0') {
|
||||
strncpy(model, txt_ty, sizeof(model));
|
||||
+ if (strlen(txt_ty) > 255)
|
||||
+ model[255] = '\0';
|
||||
if ((ptr = strchr(model, ',')) != NULL)
|
||||
*ptr = '\0';
|
||||
}
|
||||
- if (txt_pdl[0] != '\0')
|
||||
+ if (txt_pdl[0] != '\0') {
|
||||
strncpy(pdl, txt_pdl, sizeof(pdl));
|
||||
+ if (strlen(txt_pdl) > 255)
|
||||
+ pdl[255] = '\0';
|
||||
+ }
|
||||
|
||||
if (!device_id[0] && strcasecmp(model, "Unknown")) {
|
||||
if (make[0])
|
||||
21
cups-filters-createall.patch
Normal file
21
cups-filters-createall.patch
Normal file
@ -0,0 +1,21 @@
|
||||
diff -up cups-filters-1.16.1/utils/cups-browsed.conf.in.createall cups-filters-1.16.1/utils/cups-browsed.conf.in
|
||||
--- cups-filters-1.16.1/utils/cups-browsed.conf.in.createall 2018-01-02 17:17:51.555941155 +0100
|
||||
+++ cups-filters-1.16.1/utils/cups-browsed.conf.in 2018-01-02 17:19:49.651048564 +0100
|
||||
@@ -359,7 +359,7 @@ BrowseRemoteProtocols @BROWSEREMOTEPROTO
|
||||
|
||||
# LocalQueueNamingRemoteCUPS DNS-SD
|
||||
# LocalQueueNamingRemoteCUPS MakeModel
|
||||
-# LocalQueueNamingRemoteCUPS RemoteName
|
||||
+LocalQueueNamingRemoteCUPS RemoteName
|
||||
# LocalQueueNamingIPPPrinter DNS-SD
|
||||
# LocalQueueNamingIPPPrinter MakeModel
|
||||
|
||||
@@ -453,7 +453,7 @@ BrowseRemoteProtocols @BROWSEREMOTEPROTO
|
||||
# CreateIPPPrinterQueues AppleRaster
|
||||
# CreateIPPPrinterQueues Everywhere AppleRaster
|
||||
# CreateIPPPrinterQueues Driverless
|
||||
-# CreateIPPPrinterQueues All
|
||||
+CreateIPPPrinterQueues All
|
||||
|
||||
|
||||
# If cups-browsed is automatically creating print queues for native
|
||||
165
cups-filters.spec
Normal file
165
cups-filters.spec
Normal file
@ -0,0 +1,165 @@
|
||||
%global _service cups-browsed.service
|
||||
Summary: OpenPrinting CUPS filters, backends, and cups-browsed
|
||||
Name: cups-filters
|
||||
Version: 1.20.3
|
||||
Release: 10
|
||||
License: GPLv2 and GPLv2+ and GPLv3 and GPLv3+ and LGPLv2+ and MIT and BSD with advertising
|
||||
Url: http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters
|
||||
Source0: http://www.openprinting.org/download/cups-filters/cups-filters-%{version}.tar.xz
|
||||
Patch01: cups-filters-createall.patch
|
||||
Patch02: poppler-0.64.patch
|
||||
Patch03: cups-filters-covscan.patch
|
||||
Patch04: cups-filters-cleareof.patch
|
||||
|
||||
BuildRequires: pkgconf-pkg-config pkgconfig(libqpdf) pkgconfig(libpng) pkgconfig(dbus-1)
|
||||
BuildRequires: poppler-cpp-devel libtiff-devel avahi-devel libjpeg-turbo-devel pkgconfig(zlib)
|
||||
BuildRequires: pkgconfig(ijs) pkgconfig(freetype2) pkgconfig(lcms2) pkgconfig(poppler)
|
||||
BuildRequires: pkgconfig(avahi-glib) pkgconfig(glib-2.0) pkgconfig(fontconfig)
|
||||
BuildRequires: systemd cups-devel python3-cups ghostscript gcc gcc-c++ poppler-utils
|
||||
BuildRequires: autoconf automake dejavu-sans-fonts libtool
|
||||
|
||||
Requires: poppler-utils ghostscript cups-filesystem
|
||||
Requires: liberation-mono-fonts bc grep sed which cups
|
||||
|
||||
%{?systemd_requires}
|
||||
|
||||
Obsoletes: ghostscript-cups
|
||||
Obsoletes: foomatic-filters
|
||||
Obsoletes: %{name}-libs < %{version}-%{release}
|
||||
Provides: %{name}-libs = %{version}-%{release}
|
||||
|
||||
%description
|
||||
This project provides backends, filters, and other software that was once
|
||||
part of the core CUPS distribution but is no longer maintained by Apple
|
||||
Inc. In addition it contains additional filters and software developed
|
||||
independently of Apple, especially filters for the PDF-centric printing
|
||||
workflow introduced by OpenPrinting and a daemon to browse Bonjour broadcasts
|
||||
of remote CUPS printers to make these printers available locally and to
|
||||
provide backward compatibility to the old CUPS broadcasting and browsing
|
||||
of CUPS 1.5.x and older.
|
||||
|
||||
%package devel
|
||||
Summary: Development files for %{name}
|
||||
License: LGPLv2 and MIT
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
|
||||
%description devel
|
||||
This package contains the development files for %{name}
|
||||
|
||||
%package_help
|
||||
|
||||
%prep
|
||||
%autosetup -n %{name}-%{version} -p1
|
||||
|
||||
%build
|
||||
./autogen.sh
|
||||
|
||||
%configure --disable-static \
|
||||
--with-pdftops=hybrid \
|
||||
--enable-driverless \
|
||||
--with-rcdir=no \
|
||||
--enable-dbus \
|
||||
--disable-silent-rules \
|
||||
--disable-mutool \
|
||||
--enable-auto-setup-driverless
|
||||
|
||||
%make_build
|
||||
|
||||
%install
|
||||
%make_install DESTDIR=%{buildroot}
|
||||
|
||||
install -d %{buildroot}%{_pkgdocdir}/fontembed/
|
||||
cp -p fontembed/README %{buildroot}%{_pkgdocdir}/fontembed/
|
||||
install -d %{buildroot}%{_unitdir}
|
||||
install -p -m 644 utils/%{_service} %{buildroot}%{_unitdir}
|
||||
cp -a %{_cups_serverbin}/filter/foomatic-rip %{buildroot}%{_bindir}/foomatic-rip
|
||||
sed -i '/urftopdf/d' %{buildroot}%{_datadir}/cups/mime/cupsfilters.convs
|
||||
|
||||
%check
|
||||
make check
|
||||
|
||||
%post
|
||||
%systemd_post %{_service}
|
||||
/sbin/ldconfig
|
||||
|
||||
if [ $1 -eq 1 ] ; then
|
||||
IN=%{_sysconfdir}/cups/cupsd.conf
|
||||
OUT=%{_sysconfdir}/cups/cups-browsed.conf
|
||||
keyword=BrowsePoll
|
||||
if [ -f "$OUT" ]; then
|
||||
echo -e "\n
|
||||
fi
|
||||
|
||||
if [ -f "$IN" ] && grep -iq ^$keyword "$IN"; then
|
||||
if ! grep -iq ^$keyword "$OUT"; then
|
||||
(cat >> "$OUT" <<EOF
|
||||
EOF
|
||||
) || :
|
||||
(grep -i ^$keyword "$IN" >> "$OUT") || :
|
||||
fi
|
||||
sed -i -e "s,^$keyword,
|
||||
fi
|
||||
fi
|
||||
|
||||
%preun
|
||||
%systemd_preun %{_service}
|
||||
|
||||
%postun
|
||||
%systemd_postun_with_restart %{_service}
|
||||
/sbin/ldconfig
|
||||
|
||||
|
||||
%files
|
||||
%{_pkgdocdir}/NEWS
|
||||
%{_pkgdocdir}/README
|
||||
%{_pkgdocdir}/AUTHORS
|
||||
%{_pkgdocdir}/COPYING
|
||||
%{_pkgdocdir}/fontembed/README
|
||||
%config(noreplace) %{_sysconfdir}/cups/cups-browsed.conf
|
||||
%attr(0755,root,root) %{_cups_serverbin}/filter/*
|
||||
%attr(0755,root,root) %{_cups_serverbin}/backend/parallel
|
||||
%attr(0700,root,root) %{_cups_serverbin}/backend/serial
|
||||
%attr(0755,root,root) %{_cups_serverbin}/backend/implicitclass
|
||||
%attr(0755,root,root) %{_cups_serverbin}/backend/beh
|
||||
%attr(0755,root,root) %{_cups_serverbin}/backend/cups-brf
|
||||
%{_bindir}/foomatic-rip
|
||||
%{_bindir}/driverless
|
||||
%{_datadir}/cups/ppdc/*
|
||||
%{_datadir}/cups/drv/*
|
||||
%{_datadir}/cups/mime/*
|
||||
%{_datadir}/cups/banners
|
||||
%{_datadir}/cups/braille
|
||||
%{_datadir}/cups/charsets
|
||||
%{_datadir}/cups/data/*
|
||||
%{_sbindir}/cups-browsed
|
||||
%{_datadir}/ppd/cupsfilters
|
||||
%dir %{_pkgdocdir}/
|
||||
%{_libdir}/libcupsfilters.so.1*
|
||||
%{_libdir}/libfontembed.so.1*
|
||||
%{_unitdir}/%{_service}
|
||||
%{_cups_serverbin}/backend/driverless
|
||||
%{_cups_serverbin}/driver/driverless
|
||||
%exclude %{_bindir}/ttfread
|
||||
%exclude %{_prefix}/lib/debug/usr/bin/ttfread-1.20.3-10.aarch64.debug
|
||||
%exclude %{_libdir}/libcupsfilters.la
|
||||
%exclude %{_libdir}/libfontembed.la
|
||||
%exclude %{_datadir}/doc/cups-filters/INSTALL
|
||||
|
||||
%files devel
|
||||
%{_datadir}/cups/ppdc/escp.h
|
||||
%{_includedir}/cupsfilters
|
||||
%{_includedir}/fontembed
|
||||
%{_libdir}/libcupsfilters.so
|
||||
%{_libdir}/libfontembed.so
|
||||
%{_libdir}/pkgconfig/libcupsfilters.pc
|
||||
%{_libdir}/pkgconfig/libfontembed.pc
|
||||
|
||||
%files help
|
||||
%{_mandir}/man1/driverless.1.gz
|
||||
%{_mandir}/man1/foomatic-rip.1.gz
|
||||
%{_mandir}/man5/cups-browsed.conf.5.gz
|
||||
%{_mandir}/man8/cups-browsed.8.gz
|
||||
|
||||
%changelog
|
||||
* Tue Nov 12 2019 caomeng<caomeng5@huawei.com> - 1.20.3-10
|
||||
- Package init
|
||||
28
poppler-0.64.patch
Normal file
28
poppler-0.64.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 07a0a423a8469a2dd6d7f64bb3b62ba6ac42cc28 Mon Sep 17 00:00:00 2001
|
||||
From: Lars Wendler <polynomial-c@gentoo.org>
|
||||
Date: Fri, 20 Jul 2018 15:20:11 +0200
|
||||
Subject: [PATCH] GooString needs to be const since >=poppler-0.64.0
|
||||
|
||||
This only fails with >=poppler-0.67.0 but the change to const was done
|
||||
in 0.64.0
|
||||
---
|
||||
filter/pdf.cxx | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/filter/pdf.cxx b/filter/pdf.cxx
|
||||
index 206ccf88..665eab09 100644
|
||||
--- a/filter/pdf.cxx
|
||||
+++ b/filter/pdf.cxx
|
||||
@@ -734,6 +734,9 @@ extern "C" int pdf_fill_form(pdf_t *doc, opt_t *opt)
|
||||
}
|
||||
|
||||
FormField *ff = fm_text->getField();
|
||||
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 64
|
||||
+ const
|
||||
+#endif
|
||||
GooString *field_name;
|
||||
field_name = ff->getFullyQualifiedName();
|
||||
if ( ! field_name )
|
||||
--
|
||||
2.17.1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user