@@ -6,6 +6,47 @@ The format is based on [Keep a Changelog]. This project adheres to [Semantic Ver
66
77---
88
9+ ## 0.3.47 [ 2026-02-05]
10+
11+ ### Security
12+
13+ - The possibility of a stack exhaustion denial of service attack when parsing RFC 2822 has been
14+ eliminated. Previously, it was possible to craft input that would cause unbounded recursion. Now,
15+ the depth of the recursion is tracked, causing an error to be returned if it exceeds a reasonable
16+ limit.
17+
18+ This attack vector requires parsing user-provided input, with any type, using the RFC 2822 format.
19+
20+ ### Compatibility
21+
22+ - Attempting to format a value with a well-known format (i.e. RFC 3339, RFC 2822, or ISO 8601) will
23+ error at compile time if the type being formatted does not provide sufficient information. This
24+ would previously fail at runtime. Similarly, attempting to format a value with ISO 8601 that is
25+ only configured for parsing (i.e. ` Iso8601::PARSING ` ) will error at compile time.
26+
27+ ### Added
28+
29+ - Builder methods for format description modifiers, eliminating the need for verbose initialization
30+ when done manually.
31+ - ` date!(2026-W01-2) ` is now supported. Previously, a space was required between ` W ` and ` 01 ` .
32+ - ` [end] ` now has a ` trailing_input ` modifier which can either be ` prohibit ` (the default) or
33+ ` discard ` . When it is ` discard ` , all remaining input is ignored. Note that if there are components
34+ after ` [end] ` , they will still attempt to be parsed, likely resulting in an error.
35+
36+ ### Changed
37+
38+ - More performance gains when parsing.
39+
40+ ### Fixed
41+
42+ - If manually formatting a value, the number of bytes written was one short for some components.
43+ This has been fixed such that the number of bytes written is always correct.
44+ - The possibility of integer overflow when parsing an owned format description has been effectively
45+ eliminated. This would previously wrap when overflow checks were disabled. Instead of storing the
46+ depth as ` u8 ` , it is stored as ` u32 ` . This would require multiple gigabytes of nested input to
47+ overflow, at which point we've got other problems and trivial mitigations are available by
48+ downstream users.
49+
950## 0.3.46 [ 2026-01-23]
1051
1152### Added
0 commit comments