Skip to content

Commit d5144cd

Browse files
committed
v0.3.47 release
1 parent f6206b0 commit d5144cd

5 files changed

Lines changed: 46 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ license = "MIT OR Apache-2.0"
1414

1515
[workspace.dependencies]
1616
time-core = { path = "time-core", version = "=0.1.8" }
17-
time-macros = { path = "time-macros", version = "=0.2.26" }
17+
time-macros = { path = "time-macros", version = "=0.2.27" }
1818

1919
criterion = { version = "0.8.1", default-features = false }
2020
deranged = { version = "0.5.2", features = ["powerfmt"] }

time-macros/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ lints.workspace = true
22

33
[package]
44
name = "time-macros"
5-
version = "0.2.26"
5+
version = "0.2.27"
66
categories = ["date-and-time"]
77
description = """
88
Procedural macros for the time crate.

time/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ lints.workspace = true
22

33
[package]
44
name = "time"
5-
version = "0.3.46"
5+
version = "0.3.47"
66
categories = [
77
"date-and-time",
88
"no-std",

0 commit comments

Comments
 (0)