Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pappl for openSUSE:Factory checked in at 2026-08-21 17:01:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pappl (Old) and /work/SRC/openSUSE:Factory/.pappl.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pappl" Fri Aug 21 17:01:29 2026 rev:14 rq:1372824 version:1.4.12 Changes: -------- --- /work/SRC/openSUSE:Factory/pappl/pappl.changes 2026-06-08 14:25:30.125509997 +0200 +++ /work/SRC/openSUSE:Factory/.pappl.new.1258/pappl.changes 2026-08-21 17:02:55.679465418 +0200 @@ -1,0 +2,15 @@ +Fri Aug 21 10:32:45 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 1.4.12 + * Added overflow protection to the dithering code paths and for + setting ready media values. + * Added logging of the USB port status byte for USB-connected + printers. + * Now clears USB errors after a failed get device ID request. + * Updated poll error handling and forced sleep to be consistent + throughout. + * Now closes HTTP connections immediately after returning an + error. + * Fixed a locking issue when deleting a printer. + +------------------------------------------------------------------- Old: ---- pappl-1.4.11.tar.gz pappl-1.4.11.tar.gz.sig New: ---- pappl-1.4.12.tar.gz pappl-1.4.12.tar.gz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pappl.spec ++++++ --- /var/tmp/diff_new_pack.6tdh3E/_old 2026-08-21 17:02:57.324523661 +0200 +++ /var/tmp/diff_new_pack.6tdh3E/_new 2026-08-21 17:02:57.329523838 +0200 @@ -18,7 +18,7 @@ Name: pappl %define lname libpappl1 -Version: 1.4.11 +Version: 1.4.12 Release: 0 Summary: A printer application framework License: Apache-2.0 ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.6tdh3E/_old 2026-08-21 17:02:57.434527556 +0200 +++ /var/tmp/diff_new_pack.6tdh3E/_new 2026-08-21 17:02:57.448528052 +0200 @@ -1,5 +1,5 @@ -mtime: 1780822106 -commit: 190099eaeac9c60c09f3177d3ce9de3807063c663ffc2aca4cfb03b7930a6b7e +mtime: 1787312112 +commit: fee84632c6e7051e113c81066bfea2183be4e5160b2ecc0f27873d2505f39dd0 url: https://src.opensuse.org/jengelh/pappl revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-08-21 13:35:12.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ pappl-1.4.11.tar.gz -> pappl-1.4.12.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/CHANGES.md new/pappl-1.4.12/CHANGES.md --- old/pappl-1.4.11/CHANGES.md 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/CHANGES.md 2026-08-21 00:14:41.000000000 +0200 @@ -2,6 +2,18 @@ ================ +v1.4.12 - 2026-08-20 +-------------------- + +- CVE-2026-NNNNN: Added overflow protection to the dithering code paths. +- CVE-2026-NNNNN: Added overflow protection for setting ready media values. +- Added logging of the USB port status byte for USB-connected printers. +- Now clear USB errors after a failed get device ID request. +- Updated poll error handling and forced sleep to be consistent throughout. +- Now close HTTP connections immediately after returning an error (Issue #431) +- Fixed a locking issue when deleting a printer (Issue #433) + + v1.4.11 - 2026-06-05 -------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/SECURITY.md new/pappl-1.4.12/SECURITY.md --- old/pappl-1.4.11/SECURITY.md 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/SECURITY.md 2026-08-21 00:14:41.000000000 +0200 @@ -5,45 +5,12 @@ expectations are for security issues reported to this project. -Reporting a Security Bug ------------------------- - -For the purposes of this project, a security bug is a software defect that -allows a *local or remote user* to gain unauthorized access or privileges on the -host computer or to cause the software to crash. Such defects should be -reported to the project security advisory page at -<https://github.com/michaelrsweet/pappl/security/advisories>. - -Alternately, security bugs can be reported to "security AT msweet.org" using the -PGP public key below. Expect a response within 5 business days. Any proposed -embargo date should be at least 30 days and no more than 90 days in the future. - -> *Note:* If you've found a software defect that allows a *program* to gain -> unauthorized access or privileges on the host computer or causes the program -> to crash, that defect should be reported as an ordinary project issue at -> <https://github.com/michaelrsweet/pappl/issues>. - - -Responsible Disclosure ----------------------- - -With *responsible disclosure*, a security issue (and its fix) is disclosed only -after a mutually-agreed period of time (the "embargo date"). The issue and fix -are shared amongst and reviewed by the key stakeholders (Linux distributions, -OS vendors, etc.) and the CERT/CC. Fixes are released to the public on the -agreed-upon date. - -> Responsible disclosure applies only to production releases. A security -> vulnerability that only affects unreleased code can be fixed immediately -> without coordination. Vendors *should not* package and release unstable -> snapshots, beta releases, or release candidates of this software. - - Supported Versions ------------------ -All production releases of this software are subject to this security policy. A -production release is tagged and given a semantic version number of the form: +All production releases of this software are subject to this security policy. +A production release is tagged and given a semantic version number of the +form: MAJOR.MINOR.PATCH @@ -69,64 +36,50 @@ 1.0rc1 -PGP Public Key --------------- +What is a Security Bug? +----------------------- + +The following kinds of issues are generally treated as security +vulnerabilities: -The following PGP public key can be used for signing security messages. +- Daemon/service crashes/hangs caused by a network request, +- Remote code execution through an API or other interface used by PAPPL, +- Privilege escalation that allows unauthorized actions or information + disclosure, and +- Common weaknesses (buffer overflow, divide-by-zero, input validation, + use-after-free, etc.) that lead to a demonstrated (not theoretical) exploit. + +The following kinds of issues are generally treated as regular bugs: + +- Vulnerabilities caused by mis-configuration, +- Issues caused by incorrect API usage, and +- Issues that only exist in non-production software. + +Regular bugs should be reported to the project using the GitHub (public) issue +tracker page at <https://github.com/michaelrsweet/pappl/issues>. + + +Reporting a Security Bug +------------------------ + +Vulnerabilities should be reported to the project security advisory page at +<https://github.com/michaelrsweet/pappl/security/advisories>. + +Provide details, impact, reproducer, affected versions, workarounds, and a +patch for the vulnerability, if applicable. + +You can expect a response within 5 business days. + + +Responsible Disclosure +---------------------- -``` ------BEGIN PGP PUBLIC KEY BLOCK----- -Comment: GPGTools - https://gpgtools.org - -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 -WkiKlA== -=0GzT ------END PGP PUBLIC KEY BLOCK----- -``` +With *responsible disclosure*, a security issue (and its fix) is disclosed +only after a mutually-agreed period of time (the "embargo date"). The issue +and fix are shared amongst and reviewed by the key stakeholders and the +CERT/CC. Fixes are released to the public on the agreed-upon date. + +Responsible disclosure is used for security issues in production releases +whose CVSS score is 7 or more. Fixes for lesser security issues are typically +pushed to the public GitHub repository after review and included in the next +scheduled production release. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/configure new/pappl-1.4.12/configure --- old/pappl-1.4.11/configure 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/configure 2026-08-21 00:14:41.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for pappl 1.4.11. +# Generated by GNU Autoconf 2.71 for pappl 1.4.12. # # Report bugs to <https://github.com/michaelrsweet/pappl/issues>. # @@ -610,8 +610,8 @@ # Identity of this package. PACKAGE_NAME='pappl' PACKAGE_TARNAME='pappl' -PACKAGE_VERSION='1.4.11' -PACKAGE_STRING='pappl 1.4.11' +PACKAGE_VERSION='1.4.12' +PACKAGE_STRING='pappl 1.4.12' PACKAGE_BUGREPORT='https://github.com/michaelrsweet/pappl/issues' PACKAGE_URL='https://www.msweet.org/pappl' @@ -1310,7 +1310,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures pappl 1.4.11 to adapt to many kinds of systems. +\`configure' configures pappl 1.4.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1376,7 +1376,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pappl 1.4.11:";; + short | recursive ) echo "Configuration of pappl 1.4.12:";; esac cat <<\_ACEOF @@ -1485,7 +1485,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pappl configure 1.4.11 +pappl configure 1.4.12 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1703,7 +1703,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by pappl $as_me 1.4.11, which was +It was created by pappl $as_me 1.4.12, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -2461,9 +2461,9 @@ ac_config_headers="$ac_config_headers config.h" -PAPPL_VERSION="1.4.11" -PAPPL_VERSION_MAJOR="`echo 1.4.11 | awk -F. '{print $1}'`" -PAPPL_VERSION_MINOR="`echo 1.4.11 | awk -F. '{printf("%d\n",$2);}'`" +PAPPL_VERSION="1.4.12" +PAPPL_VERSION_MAJOR="`echo 1.4.12 | awk -F. '{print $1}'`" +PAPPL_VERSION_MINOR="`echo 1.4.12 | awk -F. '{printf("%d\n",$2);}'`" @@ -6009,7 +6009,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pappl $as_me 1.4.11, which was +This file was extended by pappl $as_me 1.4.12, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6074,7 +6074,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -pappl config.status 1.4.11 +pappl config.status 1.4.12 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/configure.ac new/pappl-1.4.12/configure.ac --- old/pappl-1.4.11/configure.ac 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/configure.ac 2026-08-21 00:14:41.000000000 +0200 @@ -21,7 +21,7 @@ dnl Package name and version... -AC_INIT([pappl], [1.4.11], [https://github.com/michaelrsweet/pappl/issues], [pappl], [https://www.msweet.org/pappl]) +AC_INIT([pappl], [1.4.12], [https://github.com/michaelrsweet/pappl/issues], [pappl], [https://www.msweet.org/pappl]) AC_CONFIG_HEADERS([config.h]) PAPPL_VERSION="AC_PACKAGE_VERSION" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/doc/pappl.html new/pappl-1.4.12/doc/pappl.html --- old/pappl-1.4.11/doc/pappl.html 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/doc/pappl.html 2026-08-21 00:14:41.000000000 +0200 @@ -7,7 +7,7 @@ <meta name="author" content="Michael R Sweet"> <meta name="language" content="en-US"> <meta name="copyright" content="Copyright © 2020-2026 by Michael R Sweet"> -<meta name="version" content="1.4.11"> +<meta name="version" content="1.4.12"> <style type="text/css"><!-- body { background: white; @@ -2131,6 +2131,8 @@ <li><code>HTTP_STATUS_METHOD_NOT_ALLOWED</code>: The HTTP method is not supported for the given URI. </li> +<li><code>HTTP_STATUS_NOT_FOUND</code>: The resource was not found. +</li> <li><code>HTTP_STATUS_UNAUTHORIZED</code>: Not authenticated. </li> <li><code>HTTP_STATUS_UPGRADE_REQUIRED</code>: Redirects the client to a secure page.</li> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-client.3 new/pappl-1.4.12/man/pappl-client.3 --- old/pappl-1.4.11/man/pappl-client.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-client.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-client 3 "pappl client functions" "2026-05-18" "pappl client functions" +.TH pappl-client 3 "pappl client functions" "2026-08-11" "pappl client functions" .SH NAME pappl-client \- pappl client functions .SH LIBRARY @@ -689,6 +689,8 @@ \fBHTTP_STATUS_METHOD_NOT_ALLOWED\fR: The HTTP method is not supported for the given URI. .IP \(bu 5 +\fBHTTP_STATUS_NOT_FOUND\fR: The resource was not found. +.IP \(bu 5 \fBHTTP_STATUS_UNAUTHORIZED\fR: Not authenticated. .IP \(bu 5 \fBHTTP_STATUS_UPGRADE_REQUIRED\fR: Redirects the client to a secure page. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-device.3 new/pappl-1.4.12/man/pappl-device.3 --- old/pappl-1.4.11/man/pappl-device.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-device.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-device 3 "pappl device functions" "2026-05-18" "pappl device functions" +.TH pappl-device 3 "pappl device functions" "2026-08-11" "pappl device functions" .SH NAME pappl-device \- pappl device functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-job.3 new/pappl-1.4.12/man/pappl-job.3 --- old/pappl-1.4.11/man/pappl-job.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-job.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-job 3 "pappl job functions" "2026-05-18" "pappl job functions" +.TH pappl-job 3 "pappl job functions" "2026-08-11" "pappl job functions" .SH NAME pappl-job \- pappl job functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-log.3 new/pappl-1.4.12/man/pappl-log.3 --- old/pappl-1.4.11/man/pappl-log.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-log.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-log 3 "pappl logging functions" "2026-05-18" "pappl logging functions" +.TH pappl-log 3 "pappl logging functions" "2026-08-11" "pappl logging functions" .SH NAME pappl-log \- pappl logging functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-mainloop.3 new/pappl-1.4.12/man/pappl-mainloop.3 --- old/pappl-1.4.11/man/pappl-mainloop.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-mainloop.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-mainloop 3 "pappl main loop functions" "2026-05-18" "pappl main loop functions" +.TH pappl-mainloop 3 "pappl main loop functions" "2026-08-11" "pappl main loop functions" .SH NAME pappl-mainloop \- pappl main loop functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-printer.3 new/pappl-1.4.12/man/pappl-printer.3 --- old/pappl-1.4.11/man/pappl-printer.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-printer.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-printer 3 "pappl printer functions" "2026-05-18" "pappl printer functions" +.TH pappl-printer 3 "pappl printer functions" "2026-08-11" "pappl printer functions" .SH NAME pappl-printer \- pappl printer functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-resource.3 new/pappl-1.4.12/man/pappl-resource.3 --- old/pappl-1.4.11/man/pappl-resource.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-resource.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-resource 3 "pappl resource functions" "2026-05-18" "pappl resource functions" +.TH pappl-resource 3 "pappl resource functions" "2026-08-11" "pappl resource functions" .SH NAME pappl-resource \- pappl resource functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/man/pappl-system.3 new/pappl-1.4.12/man/pappl-system.3 --- old/pappl-1.4.11/man/pappl-system.3 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/man/pappl-system.3 2026-08-21 00:14:41.000000000 +0200 @@ -1,4 +1,4 @@ -.TH pappl-system 3 "pappl system functions" "2026-05-18" "pappl system functions" +.TH pappl-system 3 "pappl system functions" "2026-08-11" "pappl system functions" .SH NAME pappl-system \- pappl system functions .SH LIBRARY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/client-ipp.c new/pappl-1.4.12/pappl/client-ipp.c --- old/pappl-1.4.11/pappl/client-ipp.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/client-ipp.c 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ // // Common client IPP processing for the Printer Application Framework // -// Copyright © 2019-2024 by Michael R Sweet. +// Copyright © 2019-2026 by Michael R Sweet. // Copyright © 2010-2019 by Apple Inc. // // Licensed under Apache License v2.0. See the file "LICENSE" for more @@ -148,6 +148,13 @@ attr = ippCopyAttribute(client->response, charset, false); ippSetGroupTag(client->response, &attr, IPP_TAG_UNSUPPORTED_GROUP); } + else if (language && !ippValidateAttribute(language)) + { + // Bad natural language... + papplClientRespondIPP(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad \"attributes-natural-language\" value '%s'.", ippGetString(language, 0, NULL)); + attr = ippCopyAttribute(client->response, language, false); + ippSetGroupTag(client->response, &attr, IPP_TAG_UNSUPPORTED_GROUP); + } else if (!charset || !language || (!uri && op != IPP_OP_CUPS_GET_DEFAULT && op != IPP_OP_CUPS_GET_PRINTERS)) { // Return an error, since attributes-charset, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/client.c new/pappl-1.4.12/pappl/client.c --- old/pappl-1.4.11/pappl/client.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/client.c 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ // // Client processing code for the Printer Application Framework // -// Copyright © 2019-2025 by Michael R Sweet. +// Copyright © 2019-2026 by Michael R Sweet. // Copyright © 2010-2019 by Apple Inc. // // Licensed under Apache License v2.0. See the file "LICENSE" for more @@ -364,7 +364,8 @@ } // If we get here the resource wasn't found... - return (papplClientRespond(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0, 0)); + papplClientRespond(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0, 0); + return (false); case HTTP_STATE_GET : // See if we have a matching resource to serve... @@ -417,7 +418,8 @@ } // If we get here then the resource wasn't found... - return (papplClientRespond(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0, 0)); + papplClientRespond(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0, 0); + return (false); case HTTP_STATE_POST : if (!strcmp(httpGetField(client->http, HTTP_FIELD_CONTENT_TYPE), "application/ipp")) @@ -449,13 +451,15 @@ else { // Otherwise you can't POST to a resource... - return (papplClientRespond(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0, 0)); + papplClientRespond(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0, 0); + return (false); } } else { // Not an IPP request or form, return an error... - return (papplClientRespond(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0, 0)); + papplClientRespond(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0, 0); + return (false); } default : @@ -479,6 +483,7 @@ // - `HTTP_STATUS_FORBIDDEN`: Authenticated but not allowed. // - `HTTP_STATUS_METHOD_NOT_ALLOWED`: The HTTP method is not supported for the // given URI. +// - `HTTP_STATUS_NOT_FOUND`: The resource was not found. // - `HTTP_STATUS_UNAUTHORIZED`: Not authenticated. // - `HTTP_STATUS_UPGRADE_REQUIRED`: Redirects the client to a secure page. // @@ -526,7 +531,8 @@ httpSetField(client->http, HTTP_FIELD_SERVER, papplSystemGetServerHeader(client->system)); if (last_modified) httpSetField(client->http, HTTP_FIELD_LAST_MODIFIED, httpGetDateString(last_modified, last_str, sizeof(last_str))); - + if (code >= HTTP_STATUS_BAD_REQUEST) + httpSetField(client->http, HTTP_FIELD_CONNECTION, "close"); if (code == HTTP_STATUS_METHOD_NOT_ALLOWED || client->operation == HTTP_STATE_OPTIONS) httpSetField(client->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST"); @@ -680,6 +686,9 @@ break; _papplClientCleanTempFiles(client); + + // Limit maximum CPU usage by a single client... + usleep(1000); } // Close the connection to the client and return... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/device-network.c new/pappl-1.4.12/pappl/device-network.c --- old/pappl-1.4.11/pappl/device-network.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/device-network.c 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ // // Network device support code for the Printer Application Framework // -// Copyright © 2019-2024 by Michael R Sweet. +// Copyright © 2019-2026 by Michael R Sweet. // Copyright © 2007-2019 by Apple Inc. // // Licensed under Apache License v2.0. See the file "LICENSE" for more @@ -1764,7 +1764,7 @@ if ((sock = papplDeviceGetData(device)) == NULL) return (-1); - // Only read if we have data to read within 100ms... + // Only read if we have data to read within 10 seconds... data.fd = sock->fd; data.events = POLLIN; data.revents = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/device-usb.c new/pappl-1.4.12/pappl/device-usb.c --- old/pappl-1.4.11/pappl/device-usb.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/device-usb.c 2026-08-21 00:14:41.000000000 +0200 @@ -598,6 +598,9 @@ // Get the 1284 Device ID... if ((error = libusb_control_transfer(usb->handle, (uint8_t)LIBUSB_REQUEST_TYPE_CLASS | (uint8_t)LIBUSB_ENDPOINT_IN | (uint8_t)LIBUSB_RECIPIENT_INTERFACE, 0, (uint16_t)usb->conf, (uint16_t)((usb->iface << 8) | usb->altset), (unsigned char *)buffer, (uint16_t)bufsize, 5000)) < 0) { + if (error == LIBUSB_ERROR_PIPE) + libusb_clear_halt(usb->handle, usb->read_endp); + papplDeviceError(device, "Unable to get IEEE-1284 device ID from USB port: %s", libusb_strerror((enum libusb_error)error)); buffer[0] = '\0'; return (NULL); @@ -763,6 +766,8 @@ } else { + papplDeviceError(device, "DEBUG: USB port status is 0x%02X.", port_status & 255); + if (!(port_status & 0x08)) status |= PAPPL_PREASON_OTHER; if (port_status & 0x20) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/dnssd.c new/pappl-1.4.12/pappl/dnssd.c --- old/pappl-1.4.11/pappl/dnssd.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/dnssd.c 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ // // DNS-SD support for the Printer Application Framework // -// Copyright © 2019-2024 by Michael R Sweet. +// Copyright © 2019-2026 by Michael R Sweet. // Copyright © 2010-2019 by Apple Inc. // // Licensed under Apache License v2.0. See the file "LICENSE" for more @@ -1319,7 +1319,8 @@ static void * // O - Exit status dns_sd_run(void *data) // I - System object { - int err; // Status + int count, // Number of poll file descriptors + err; // Status pappl_system_t *system = (pappl_system_t *)data; // System object struct pollfd pfd; // Poll data @@ -1332,14 +1333,19 @@ { // Wait up to 1 second for new data... # if _WIN32 - if (poll(&pfd, 1, 1000) < 0 && WSAGetLastError() == WSAEINTR) + if ((count = poll(&pfd, 1, 1000)) < 0 && WSAGetLastError() == WSAEINTR) # else - if (poll(&pfd, 1, 1000) < 0 && errno != EINTR && errno != EAGAIN) + if ((count = poll(&pfd, 1, 1000)) < 0 && errno != EINTR && errno != EAGAIN) # endif // _WIN32 { papplLog(system, PAPPL_LOGLEVEL_ERROR, "DNS-SD poll failed: %s", strerror(errno)); break; } + else if (count <= 0) + { + usleep(1); + continue; + } if (pfd.revents & POLLIN) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/job-process.c new/pappl-1.4.12/pappl/job-process.c --- old/pappl-1.4.11/pappl/job-process.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/job-process.c 2026-08-21 00:14:41.000000000 +0200 @@ -725,7 +725,7 @@ if (header.cupsColorSpace == CUPS_CSPACE_K) { // Black... - for (x = 0, lineptr = line, pixptr = pixels, bit = 128, byte = 0; x < header.cupsWidth; x ++, pixptr ++) + for (x = 0, lineptr = line, pixptr = pixels, bit = 128, byte = 0; x < header.cupsWidth && x < options->header.cupsWidth; x ++, pixptr ++) { if (*pixptr > dither[x & 15]) byte |= bit; @@ -746,7 +746,7 @@ else { // Grayscale to black... - for (x = 0, lineptr = line, pixptr = pixels, bit = 128, byte = 0; x < header.cupsWidth; x ++, pixptr ++) + for (x = 0, lineptr = line, pixptr = pixels, bit = 128, byte = 0; x < header.cupsWidth && x < options->header.cupsWidth; x ++, pixptr ++) { if (*pixptr <= dither[x & 15]) byte |= bit; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/log.c new/pappl-1.4.12/pappl/log.c --- old/pappl-1.4.11/pappl/log.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/log.c 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ // // Logging functions for the Printer Application Framework // -// Copyright © 2019-2024 by Michael R Sweet. +// Copyright © 2019-2026 by Michael R Sweet. // // Licensed under Apache License v2.0. See the file "LICENSE" for more // information. @@ -233,7 +233,10 @@ // System - papplLog(system, PAPPL_LOGLEVEL_ERROR, "[Device] %s", message); + if (!strncmp(message, "DEBUG: ", 7)) + papplLog(system, PAPPL_LOGLEVEL_DEBUG, "[Device] %s", message + 7); + else + papplLog(system, PAPPL_LOGLEVEL_ERROR, "[Device] %s", message); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/printer-ipp.c new/pappl-1.4.12/pappl/printer-ipp.c --- old/pappl-1.4.11/pappl/printer-ipp.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/printer-ipp.c 2026-08-21 00:14:41.000000000 +0200 @@ -1120,7 +1120,7 @@ { count = ippGetCount(rattr); - for (i = 0; i < count; i ++) + for (i = 0; i < count && i < driver_data.num_source; i ++) _papplMediaColImport(ippGetCollection(rattr, i), driver_data.media_ready + i); for (; i < PAPPL_MAX_SOURCE; i ++) @@ -1143,7 +1143,7 @@ { count = ippGetCount(rattr); - for (i = 0; i < count; i ++) + for (i = 0; i < count && i < driver_data.num_source; i ++) { if ((pwg = pwgMediaForPWG(ippGetString(rattr, i, NULL))) != NULL) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/printer-raw.c new/pappl-1.4.12/pappl/printer-raw.c --- old/pappl-1.4.11/pappl/printer-raw.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/printer-raw.c 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ // // Raw printing support for the Printer Application Framework // -// Copyright © 2019-2025 by Michael R Sweet. +// Copyright © 2019-2026 by Michael R Sweet. // // Licensed under Apache License v2.0. See the file "LICENSE" for more // information. @@ -76,7 +76,7 @@ pappl_printer_t *printer) // I - Printer { int i; // Looping var - int count; // Return value from poll() + int pcount; // Return value from poll() papplLogPrinter(printer, PAPPL_LOGLEVEL_DEBUG, "Socket listener thread starting with %d listeners.", printer->num_raw_listeners); @@ -103,12 +103,31 @@ if (papplPrinterIsDeleted(printer) || _papplSystemIsShutdownNoLock(printer->system)) break; - // Wait 1 second for new connections... - if ((count = poll(printer->raw_listeners, (nfds_t)printer->num_raw_listeners, 250)) > 0) + // Wait a second for new connections... + if ((pcount = poll(printer->raw_listeners, (nfds_t)printer->num_raw_listeners, 1000)) < 0) { + if (errno != EAGAIN && errno != EINTR) + { + papplLogPrinter(printer, PAPPL_LOGLEVEL_ERROR, "Raw poll failed: %s", strerror(errno)); + break; + } + if (papplPrinterIsDeleted(printer) || _papplSystemIsShutdownNoLock(printer->system)) break; + sleep(1); + } + else if (papplPrinterIsDeleted(printer) || _papplSystemIsShutdownNoLock(printer->system)) + { + break; + } + else if (pcount == 0) + { + // No new connections, sleep for 1ms to avoid hogging the CPU... + usleep(1000); + } + else if (pcount > 0) + { // Got a new connection request, accept from the corresponding listener... for (i = 0; i < printer->num_raw_listeners; i ++) { @@ -170,10 +189,16 @@ if ((bytes = poll(&sockp, 1, 1000)) <= 0) { + if (bytes < 0 && errno != EAGAIN && errno != EINTR) + break; + if ((time(NULL) - activity) >= 60) break; - else - continue; + + if (bytes < 0) + usleep(1); + + continue; } if (sockp.revents & POLLIN) @@ -231,8 +256,6 @@ } } } - else if (count < 0 && errno != EAGAIN) - break; } _papplRWLockWrite(printer); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/printer-usb.c new/pappl-1.4.12/pappl/printer-usb.c --- old/pappl-1.4.11/pappl/printer-usb.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/printer-usb.c 2026-08-21 00:14:41.000000000 +0200 @@ -103,7 +103,7 @@ int i; // Looping var struct pollfd data[NUM_IPP_USB + 1]; // USB printer gadget listeners _ipp_usb_iface_t ifaces[NUM_IPP_USB]; // IPP-USB gadget interfaces - int count; // Number of file descriptors from poll() + int pcount; // Number of file descriptors from poll() pappl_device_t *device = NULL; // Printer port data char buffer[8192]; // Print data buffer ssize_t bytes; // Bytes in buffer @@ -156,9 +156,10 @@ while (!papplPrinterIsDeleted(printer) && !_papplSystemIsShutdownNoLock(printer->system)) { - if ((count = poll(data, NUM_IPP_USB + 1, 1000)) < 0) + if ((pcount = poll(data, NUM_IPP_USB + 1, 1000)) < 0) { - papplLogPrinter(printer, PAPPL_LOGLEVEL_ERROR, "USB poll failed: %s", strerror(errno)); + if (errno != EAGAIN && errno != EINTR) + papplLogPrinter(printer, PAPPL_LOGLEVEL_ERROR, "USB poll failed: %s", strerror(errno)); if (papplPrinterIsDeleted(printer) || _papplSystemIsShutdownNoLock(printer->system)) break; @@ -169,9 +170,15 @@ { break; } - else if (count > 0) + else if (pcount == 0) { - papplLogPrinter(printer, PAPPL_LOGLEVEL_DEBUG, "USB poll returned %d, revents=[%d %d %d %d].", count, data[0].revents, data[1].revents, data[2].revents, data[3].revents); + // No new data, sleep 1ms to prevent excessive CPU usage... + usleep(1000); + } + else + { + // Check for new data + papplLogPrinter(printer, PAPPL_LOGLEVEL_DEBUG, "USB poll returned %d, revents=[%d %d %d %d].", pcount, data[0].revents, data[1].revents, data[2].revents, data[3].revents); if (data[0].revents & (POLLERR | POLLHUP)) { @@ -329,11 +336,6 @@ } } } - else - { - // No new data, sleep 1ms to prevent excessive CPU usage... - usleep(1000); - } if (device && (time(NULL) - device_time) > 5) { @@ -1302,6 +1304,10 @@ pthread_setcancelstate(cstate, NULL); } + else + { + sleep(1); + } } error: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/printer.c new/pappl-1.4.12/pappl/printer.c --- old/pappl-1.4.11/pappl/printer.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/printer.c 2026-08-21 00:14:41.000000000 +0200 @@ -781,7 +781,9 @@ // Remove the printer from the system object... _papplRWLockWrite(system); + pthread_rwlock_wrlock(&system->printers_rwlock); cupsArrayRemove(system->printers, printer); + pthread_rwlock_unlock(&system->printers_rwlock); _papplRWUnlock(system); _papplPrinterDelete(printer); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl/system.c new/pappl-1.4.12/pappl/system.c --- old/pappl-1.4.11/pappl/system.c 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl/system.c 2026-08-21 00:14:41.000000000 +0200 @@ -655,8 +655,22 @@ papplLog(system, PAPPL_LOGLEVEL_ERROR, "Unable to accept new connections: %s", strerror(errno)); break; } + else if (pcount <= 0) + { + // Limit CPU usage + if (ptimeout > 0) + usleep(1000); + + // Resume listening + _papplRWLockRead(system); - if (pcount > 0) + if (system->num_clients < system->max_clients) + { + for (i = 0; i < system->num_listeners; i ++) + system->listeners[i].events = POLLIN; + } + } + else if (pcount > 0) { // Accept client connections as needed... for (i = 0; i < (cups_len_t)system->num_listeners; i ++) @@ -687,16 +701,6 @@ system->listeners[i].events = 0; } } - else - { - _papplRWLockRead(system); - - if (system->num_clients < system->max_clients) - { - for (i = 0; i < system->num_listeners; i ++) - system->listeners[i].events = POLLIN; - } - } dns_sd_host_changes = _papplDNSSDGetHostChanges(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/pappl.spec new/pappl-1.4.12/pappl.spec --- old/pappl-1.4.11/pappl.spec 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/pappl.spec 2026-08-21 00:14:41.000000000 +0200 @@ -9,7 +9,7 @@ Summary: Printer Application Framework (PAPPL) Name: pappl -Version: 1.4.11 +Version: 1.4.12 Release: 1 License: Apache 2.0 Group: Development/Libraries diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/config.h new/pappl-1.4.12/vcnet/config.h --- old/pappl-1.4.11/vcnet/config.h 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/config.h 2026-08-21 00:14:41.000000000 +0200 @@ -76,7 +76,7 @@ typedef unsigned long useconds_t; #define sleep(X) Sleep(1000 * (X)) -#define usleep(X) Sleep((X)/1000) +#define usleep(X) Sleep((X+999)/1000) // @@ -107,7 +107,7 @@ // Version numbers -#define PAPPL_VERSION "1.4.11" +#define PAPPL_VERSION "1.4.12" #define PAPPL_VERSION_MAJOR 1 #define PAPPL_VERSION_MINOR 4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/copy-dlls.bat new/pappl-1.4.12/vcnet/copy-dlls.bat --- old/pappl-1.4.11/vcnet/copy-dlls.bat 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/copy-dlls.bat 2026-08-21 00:14:41.000000000 +0200 @@ -1,5 +1,5 @@ :: Script to copy dependent DLLs to the named build directory -copy packages\libcups2_native.redist.2.4.11.1\build\native\bin\x64\Debug\*.dll %1 +copy packages\libcups2_native.redist.2.4.20\build\native\bin\x64\Debug\*.dll %1 copy packages\libjpeg-turbo-v142.2.0.4.3\build\native\bin\x64\v142\Debug\*.dll %1 copy packages\libressl_native.redist.3.7.3\build\native\bin\x64\Debug\*.dll %1 copy packages\libpng_native.redist.1.6.30\build\native\bin\x64\Debug\*.dll %1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/libpappl1.vcxproj new/pappl-1.4.12/vcnet/libpappl1.vcxproj --- old/pappl-1.4.11/vcnet/libpappl1.vcxproj 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/libpappl1.vcxproj 2026-08-21 00:14:41.000000000 +0200 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props" Condition="Exists('packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props')" /> + <Import Project="packages\libcups2_native.2.4.20\build\native\libcups2_native.props" Condition="Exists('packages\libcups2_native.2.4.20\build\native\libcups2_native.props')" /> <Import Project="packages\libjpeg-turbo-v142.2.0.4.3\build\native\libjpeg-turbo-v142.props" Condition="Exists('packages\libjpeg-turbo-v142.2.0.4.3\build\nativelinjpeg-turbo-v142.props')" /> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug-Messages|x64"> @@ -88,7 +88,7 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> - <AdditionalDependencies>packages\libcups2_native.2.4.11.1\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libpng_native.1.6.30\build\native\lib\x64\Debug\libpng16d.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>packages\libcups2_native.2.4.20\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libpng_native.1.6.30\build\native\lib\x64\Debug\libpng16d.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)libpappl1.dll</OutputFile> <ModuleDefinitionFile>..\pappl\libpappl1.def</ModuleDefinitionFile> <GenerateDebugInformation>true</GenerateDebugInformation> @@ -115,7 +115,7 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> - <AdditionalDependencies>packages\libcups2_native.2.4.11.1\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libpng_native.1.6.30\build\native\lib\x64\Debug\libpng16d.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>packages\libcups2_native.2.4.20\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libpng_native.1.6.30\build\native\lib\x64\Debug\libpng16d.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)libpappl1.dll</OutputFile> <ModuleDefinitionFile>..\pappl\libpappl1.def</ModuleDefinitionFile> <GenerateDebugInformation>true</GenerateDebugInformation> @@ -139,7 +139,7 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> </ClCompile> <Link> - <AdditionalDependencies>packages\libcups2_native.2.4.11.1\build\native\lib\x64\Release\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libpng_native.1.6.30\build\native\lib\x64\Release\libpng16.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Release\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>packages\libcups2_native.2.4.20\build\native\lib\x64\Release\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libpng_native.1.6.30\build\native\lib\x64\Release\libpng16.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Release\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)libpappl1.dll</OutputFile> <ModuleDefinitionFile>..\pappl\libpappl1.def</ModuleDefinitionFile> <GenerateDebugInformation>true</GenerateDebugInformation> @@ -252,6 +252,6 @@ </PropertyGroup> <Error Condition="!Exists('packages\zlib_native.redist.1.2.11\build\native\zlib_native.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\zlib_native.redist.1.2.11\build\native\zlib_native.redist.targets'))" /> <Error Condition="!Exists('packages\zlib_native.1.2.11\build\native\zlib_native.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\zlib_native.1.2.11\build\native\zlib_native.targets'))" /> - <Error Condition="!Exists('packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props'))" /> + <Error Condition="!Exists('packages\libcups2_native.2.4.20\build\native\libcups2_native.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\libcups2_native.2.4.20\build\native\libcups2_native.props'))" /> </Target> </Project> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/libpappl1_native.nuspec new/pappl-1.4.12/vcnet/libpappl1_native.nuspec --- old/pappl-1.4.11/vcnet/libpappl1_native.nuspec 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/libpappl1_native.nuspec 2026-08-21 00:14:41.000000000 +0200 @@ -3,7 +3,7 @@ <metadata> <id>libpappl1_native</id> <title>Printer Application Framework (PAPPL) for VS2019+</title> - <version>1.4.11.0</version> + <version>1.4.12.0</version> <authors>Michael R Sweet</authors> <owners>michaelrsweet</owners> <projectUrl>https://github.com/michaelrsweet/pappl</projectUrl> @@ -14,11 +14,11 @@ <description>Printer Application Framework (PAPPL) for VS2019+</description> <summary>PAPPL is a simple C-based framework/library for developing CUPS Printer Applications, which are the recommended replacement for printer drivers. PAPPL is licensed under the Apache License Version 2.0 with an exception to allow linking against GNU GPL2-only software.</summary> - <copyright>Copyright © 2019-2025 by Michael R Sweet</copyright> + <copyright>Copyright © 2019-2026 by Michael R Sweet</copyright> <tags>airprint everywhere http ipp mopria native</tags> <dependencies> - <dependency id="libcups2_native" version="2.4.11.1" /> - <dependency id="libpappl1_native.redist" version="1.4.11.0" /> + <dependency id="libcups2_native" version="2.4.20" /> + <dependency id="libpappl1_native.redist" version="1.4.12.0" /> </dependencies> </metadata> <files> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/libpappl1_native.redist.nuspec new/pappl-1.4.12/vcnet/libpappl1_native.redist.nuspec --- old/pappl-1.4.11/vcnet/libpappl1_native.redist.nuspec 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/libpappl1_native.redist.nuspec 2026-08-21 00:14:41.000000000 +0200 @@ -3,7 +3,7 @@ <metadata> <id>libpappl1_native.redist</id> <title>Printer Application Framework (PAPPL) for VS2019+ Redist</title> - <version>1.4.11.0</version> + <version>1.4.12.0</version> <authors>Michael R Sweet</authors> <owners>michaelrsweet</owners> <projectUrl>https://github.com/michaelrsweet/pappl</projectUrl> @@ -14,10 +14,10 @@ <description>Redistributable components for package 'libpappl1_native'. This package should only be installed as a dependency.</description> <summary>PAPPL is a simple C-based framework/library for developing CUPS Printer Applications, which are the recommended replacement for printer drivers. This package provides the redistributable content for PAPPL. PAPPL is licensed under the Apache License Version 2.0 with an exception to allow linking against GNU GPL2-only software.</summary> - <copyright>Copyright © 2019-2025 by Michael R Sweet</copyright> + <copyright>Copyright © 2019-2026 by Michael R Sweet</copyright> <tags>airprint everywhere http ipp mopria native</tags> <dependencies> - <dependency id="libcups2_native.redist" version="2.4.11.1" /> + <dependency id="libcups2_native.redist" version="2.4.20" /> <dependency id="libjpeg-turbo-v142" version="2.0.4.3" /> <dependency id="libpng_native.redist" version="1.6.30" /> <dependency id="libressl_native.redist" version="3.7.3.0" /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/packages.config new/pappl-1.4.12/vcnet/packages.config --- old/pappl-1.4.11/vcnet/packages.config 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/packages.config 2026-08-21 00:14:41.000000000 +0200 @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="libcups2_native" version="2.4.11.1" targetFramework="native" /> - <package id="libcups2_native.redist" version="2.4.11.1" targetFramework="native" /> + <package id="libcups2_native" version="2.4.20" targetFramework="native" /> + <package id="libcups2_native.redist" version="2.4.20" targetFramework="native" /> <package id="libjpeg-turbo-v142" version="2.0.4.3" targetFramework="native" /> <package id="libpng_native" version="1.6.30" targetFramework="native" /> <package id="libpng_native.redist" version="1.6.30" targetFramework="native" /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/vcnet/testpappl.vcxproj new/pappl-1.4.12/vcnet/testpappl.vcxproj --- old/pappl-1.4.11/vcnet/testpappl.vcxproj 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/vcnet/testpappl.vcxproj 2026-08-21 00:14:41.000000000 +0200 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props" Condition="Exists('packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props')" /> + <Import Project="packages\libcups2_native.2.4.20\build\native\libcups2_native.props" Condition="Exists('packages\libcups2_native.2.4.20\build\native\libcups2_native.props')" /> <Import Project="packages\libjpeg-turbo-v142.2.0.4.3\build\native\libjpeg-turbo-v142.props" Condition="Exists('packages\libjpeg-turbo-v142.2.0.4.3\build\nativelinjpeg-turbo-v142.props')" /> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug-Messages|x64"> @@ -91,7 +91,7 @@ <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> - <AdditionalDependencies>packages\libcups2_native.2.4.11.1\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>packages\libcups2_native.2.4.20\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Messages|x64'"> @@ -114,7 +114,7 @@ <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> - <AdditionalDependencies>packages\libcups2_native.2.4.11.1\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>packages\libcups2_native.2.4.20\build\native\lib\x64\Debug\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Debug\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -137,7 +137,7 @@ <RandomizedBaseAddress>false</RandomizedBaseAddress> <DataExecutionPrevention> </DataExecutionPrevention> - <AdditionalDependencies>packages\libcups2_native.2.4.11.1\build\native\lib\x64\Release\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Release\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>packages\libcups2_native.2.4.20\build\native\lib\x64\Release\libcups2.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\ssl.lib;packages\libressl_native.3.7.3\build\native\lib\x64\Release\crypto.lib;packages\libjpeg-turbo-v142.2.0.4.3\build\native\lib\x64\v142\Release\jpeg.lib;ws2_32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> @@ -170,6 +170,6 @@ <Error Condition="!Exists('packages\zlib_native.1.2.11\build\native\zlib_native.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\zlib_native.1.2.11\build\native\zlib_native.targets'))" /> <Error Condition="!Exists('packages\libpng_native.redist.1.6.30\build\native\libpng_native.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\libpng_native.redist.1.6.30\build\native\libpng_native.redist.targets'))" /> <Error Condition="!Exists('packages\libpng_native.1.6.30\build\native\libpng_native.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\libpng_native.1.6.30\build\native\libpng_native.targets'))" /> - <Error Condition="!Exists('packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\libcups2_native.2.4.11.1\build\native\libcups2_native.props'))" /> + <Error Condition="!Exists('packages\libcups2_native.2.4.20\build\native\libcups2_native.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\libcups2_native.2.4.20\build\native\libcups2_native.props'))" /> </Target> </Project> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pappl-1.4.11/xcode/config.h new/pappl-1.4.12/xcode/config.h --- old/pappl-1.4.11/xcode/config.h 2026-06-05 21:37:58.000000000 +0200 +++ new/pappl-1.4.12/xcode/config.h 2026-08-21 00:14:41.000000000 +0200 @@ -8,7 +8,7 @@ // // Version numbers -#define PAPPL_VERSION "1.4.11" +#define PAPPL_VERSION "1.4.12" #define PAPPL_VERSION_MAJOR 1 #define PAPPL_VERSION_MINOR 4
