Changes in libcups
==================

v3.0.3 - 2026-08-20
-------------------

- CVE-2026-NNNNN: The `cupsUTF32toUTF8` function incorrectly treated UTF-32
  values as 64-bit.
- Now run `ldconfig` on Linux after installing the shared library (Issue #148)
- Now use dateTime variants of Job attributes.
- Added Chinese media sizes (Issue #152)
- Added length checks for JWT signatures (Issue #155)
- Added language code validation to nameWithLanguage and textWithLanguage
  values.
- Updated the configure script to look for PDFio v1.2 or later.
- Fixed a non-blocking IO bug that impacted GNOME.
- Fixed a potential buffer overflow in `cupsFormEncode`.
- Fixed long number string error handling in `cupsJSONImportXxx`.
- Fixed HTTP state for POST/PUT with an empty message body (Issue #149)
- Fixed the example RPM spec file (Issue #150)
- Fixed the `ipptool` "get-printer-attributes-suite.test" test file (Issue #154)
- Fixed potential buffer overflow in `cupsCopyDestConflicts`.
- Fixed potential buffer overrun in `cupsDoAuthentication` (Issue #156)
- Fixed potential buffer overrun in `cupsSignCredentialsRequest`.
- Fixed X.509 name checks using OpenSSL.
- Fixed renewal of expired self-signed certificates.
- Fixed potential buffer overflow in Windows DNS-SD code.
- Fixed potential buffer underflow in `ippAdd/SetStringf(v)`.


v3.0.2 - 2026-06-05
-------------------

- Updated `ipptool` to limit the range of supported raster resolutions for the
  generated test page content from 1 to 9600dpi.
- Fixed a recursion issue with encoding of nested collections.
- Fixed a potential margin issue when generating A4 PCL from `ipptransform`.
- Fixed exporting of JSON with very large numbers.
- Fixed page header validation in `cupsRasterReadHeader` and
  `cupsRasterWriteHeader` for banded raster data.
- Fixed potential crash bug in `cupsCheckDestSupported` function.
- Fixed a duplicate printer bug in `cupsEnumDests` and `cupsGetDests`.


v3.0.1 - 2026-04-09
-------------------

- Updated the internal implementation of `ipp_t` to avoid issues on some
  embedded platforms (Issue #141)
- Updated `httpAddrLookup` to return a numeric address when the resolver
  returns "localhost" for a non-loopback address.
- Updated `cupsFileGetConf` and `cupsFilePutConf` to escape more characters.
- Updated `cupsRasterReadHeader` to validate more of the page header values.
- Updated `ippeveprinter` to support custom "printer-state-reasons" keyword
  values (Issue #142)
- Fixed a bug when the `ippFindXxx` and `ippSetXxx` functions were mixed
  (Issue #138)
- Fixed error handling in the low-level TLS read/write functions.


v3.0.0 - 2026-01-08
-------------------

- Added `cupsLangIsRTL` API.
- Added `cupsOAuthGetDeviceGrant`, `cupsOAuthGetJWKS`, and `cupsOAuthGetUserId`
  APIs.
- Added `httpGetCookieValue` and `httpGetSecurity` APIs.
- Added an "install" sub-command to the `cups-x509` command.
- Added a "--user-agent" option to the `ipptool` command.
- Updated documentation (Issue #113)
- Updated the `cupsOAuth` APIs to support sharing of some OAuth values between
  the system (root) and per-user cache values.
- Updated the `cupsJWTNew` API to accept an optional JSON claims object.
- Updated the `httpSetCookie` API to support multiple "Set-Cookie:" header
  values.
- Updated `ippfind` to use the `cupsGetClock` API.
- Updated `ippeveprinter` to include all ready and supported attributes and
  values in the environment when processing a job.
- Fixed `ipptransform` media handling to preserve input document dimensions when
  "media" or "media-col" are not specified (Issue #102)
- Fixed `cupsJSONExport` functions with empty arrays or objects.
- Fixed `httpGetDateTime` for dates in the far future (Issue #124)
- Fixed input checks for `cupsCreateCredentials` and
  `cupsCreateCredentialsRequest` APIs (Issue #125)
- Fixed return values of `ippDateToTime` when the timezone isn't GMT.
- Fixed a potential timing issue with `cupsEnumDests`.
- Fixed a bug in the Avahi implementation of `cupsDNSSDBrowseNew`.
- Fixed a memory leak in `httpClose`.
- Fixed some Coverity-detected issues.
- Fixed support for device authorization grants.


v3.0rc4 - 2025-03-18
--------------------

- Added `cupsCopyCredentialsPublicKey` API.
- Added `cupsGetClock` API.
- Added `cupsJWTLoadCredentials` API.
- Added "client.conf" man page.
- Added `cups-oauth` and `cups-x509` utilities (Issue #108)
- Updated documentation (Issue #99)
- Updated the `ipptool` utility to support the `--bearer-token` and
  `--client-name` options.
- Updated `cupsOAuthGetMetadata` to support Microsoft Azure/Entra OAuth
  servers.
- Updated `ipptransform` to support generation of PCLm output in addition to PWG
  Raster data.
- Updated `cupsEnumDests` and `cupsGetDests` to support printer browsing and
  filtering options in client.conf (Issue #106)
- Fixed handling of finishings/finishings-col and media/media-col in the
  `ippeveprinter` tool (Issue #95)
- Fixed a duplicate printer reporting bug in `cupsGetDests`.
- Fixed handling of `NULL` path in `cupsSaveCredentials` API.
- Fixed handling of default authorization strings.
- Fixed validation of dateTime values with time zones more than UTC+11.


v3.0rc3 - 2024-10-22
--------------------

- Updated `cupsCreateCertificateRequest` to store the new private key
  separately.
- Updated `cupsSaveCredentials` to validate the input credentials, support
  using a saved private key from `cupsCreateCertificateRequest`, and support
  credential removal as documented.
- Updated the raster functions to report more issues via
  `cupsRasterGetErrorString`.
- Fixed a crash bug on Windows.


v3.0rc2 - 2024-10-15
--------------------

- Updated `httpConnectAgain` to re-validate the server's X.509 certificate
  (Issue #90)
- Updated the source tarball script to include the PDFio sources.
- Fixed handling of empty resolution values passed to `ipptool` (Issue #63)
- Fixed a compressed file error handling bug (Issue #91)
- Fixed the default User-Agent string sent in requests.
- Fixed a recursion issue in `ippReadIO`.


v3.0rc1 - 2024-09-20
--------------------

- Added `cupsFormatString` and `cupsFormatStringv` APIs to safely format UTF-8
  strings.
- Added support for per-user instances of `cups-locald` (Issue #69)
- Added `httpConnectURI` API.
- Added "end" argument to `cupsParseOptions` API.
- Renamed `httpReconnect` to `httpConnectAgain`.
- Updated `cupsDestInfo` to accept a `cups_dest_flags_t` argument.
- Updated `cupsCopyString` and `cupsConcatString` APIs to safely terminate UTF-8
  strings.
- Updated list of attributes included in the destination options.
- Updated `cupsAddIntegerOption` and `cupsGetIntegerOption` to use the `long`
  type.
- Updated `httpAddrConnect()` to handle `POLLHUP` together with `POLLIN` or
  `POLLOUT`.
- Updated the various tool man pages, usage output, and examples.
- Updated `ippCreateRequestedArray` for the Get-Documents and
  Get-Output-Device-Attributes operations.
- Updated `ipptool` to validate IPP, PDF, and .strings files using the
  "WITH-[ALL-]CONTENT" predicate (Issue #87)
- Now use installed PDFio library, if available.
- Now use NotoSansMono font for `ipptransform` text conversions.
- Brought back IPP/2.x and related conformance test files (Issue #85)
- The `ipptransform` program now supports uncollated copies.
- Fixed GNU TLS crash.
- Fixed PCL output from `ipptransform` (Issue #72)
- Fixed JSON output from `ipptool`.
- Fixed hang/crash in `cupsEnumDests`/`cupsGetDests` (Issue #74)
- Fixed encoding of IPv6 addresses in HTTP requests (Issue #78)
- Fixed encoding of `IPP_TAG_EXTENSION` values in IPP messages (Issue #80)
- Fixed error handling when reading a mixed `1setOf` attribute (Issue #83)
- Fixed non-quick copy of collection values.
- Fixed error handling in `cupsConnectDest`.
- Fixed TLS negotiation using OpenSSL with servers that require the TLS SNI
  extension.
- Fixed a certificate loading issue with OpenSSL.
- Fixed cupsAreCredentialsValidForName with OpenSSL.
- Fixed how `ippeveprinter` responds to an unsupported request character set.


v3.0b2 - 2023-10-05
-------------------

- Added the `ipptransform` command to replace/upgrade the `ippevepcl` and
  `ippeveps` commands (Issue #65)
- Added `cupsFormDecode` and `cupsFormEncode` APIs (Issue #49)
- Added `cupsJWT` APIs to support JSON Web Tokens (Issue #50, Issue #52)
- Added `ippAddCredentialsString` and `ippCopyCredentialsString` APIs
  (Issue #58)
- Added `cupsCreateCredentialsRequest` and `cupsSignCredentialsRequest` APIs and
  updated `cupsCreateCredentials` API to better support X.509 certificates
  (Issue #59)
- Updated the configure script to add `_FORTIFY_SOURCE=3` (previous level was 2)
  when not using address sanitizer and when it hasn't already been added
  (Issue #51)
- Updated the `httpAddrListen` function to use the maximum backlog value.
- Fixed ipptool limit on the size of an attribute value that would be printed
  (Issue #5)
- Fixed some configure script issues (Issue #48)
- Fixed JSON output bug in ipptool.
- Fixed `CUPS_DNSSD_IF_INDEX_LOCAL` when using Avahi.


v3.0b1 - 2023-02-09
-------------------

- Documentation updates (Issue #32)
- Split out libcups and tools from CUPS 2.x.
- Simplified the configure script.
- Now require a C99-capable C compiler.
- Now require GNU TLS, LibreSSL, or OpenSSL.
- Now require ZLIB.
- Now require POSIX or Windows threading support.
- Now require the `poll` function (`WSAPoll` on Windows).
- Now install with a prefix by default to allow coexistance with CUPS 2.x
  (Issue #21)
- Added new `GENERATE-FILE` directive for `ipptool` test files.
- Added new `ATTR-IF-DEFINED` and `ATTR-IF-NOT-DEFINED` directives to IPP data
  files (Issue #3)
- Added `ippFile` API for working with IPP data files as used by `ipptool`,
  `ippexeprinter`, and other tools (Issue #14)
- Added a roll to the default color ippeveprinter printer.
- Added new DNS-SD API (Issue #19)
- Added new PWG media sizes.
- Added new `WITH-ALL-VALUES-FROM` predicate for ipptool files (Issue #20)
- Added new `SAVE-ALL-CONTENT`, `WITH-ALL-CONTENT`, and `WITH-ALL-MIME-TYPES`
  predicates for ipptool files (Issue #22)
- Added, modernized, and promoted the localization interfaces to public API
  (Issue #24)
- Added public JSON API (Issue #31)
- Added new `basename` variable for use in ipptool files (Issue #44)
- Updated the CUPS API for consistency.
- Fixed ipptool's handling of EXPECT for member attributes (Issue #4)
- Fixed ipptool's support for octetString values (Issue #23)
- Removed all obsolete/deprecated CUPS 2.x APIs.
- Removed (obsolete) Kerberos support.
- Removed support for SecureTransport (macOS) due to deprecation of the platform
  API.
- Removed support for SChannel (Windows) due to restrictions on its use in
  domain accounts.
