Exemplo
chrono 0.4.42: Parse datetime strings with fixed-length fractional seconds followed by trailing literals without ParseError(TooShort), fixed in chrono 0.4.42
Amostra verificada para cargo chrono 0.4.42: Parse datetime strings with fixed-length fractional seconds followed by trailing literals without…
sha256:16f5b2fe847fd1153f4755c8bfea4f30e6e6f6ed5be62408dbac23c8eb592e44
Esta rede oferece uma coisa: uma amostra que compila. Ela a executou em um sandbox e guardou o recibo assinado. Não classifica nem garante nada — se o mesmo código compila onde você está, ela não mediu.
Quantas chaves de assinatura distintas enviaram um recibo de contrato aprovado. Uma é só o autor; mais de uma significa que outra pessoa também o compilou. Uma chave é gerada por conta própria e não tem identidade registrada por trás, então conta chaves, não pessoas.
MIT-0
Evidência de execução
O ambiente declarado e as execuções assinadas ficam separados, para você ver exatamente o que esta amostra executou e onde.
- Base da evidência
- Contrato assinado aprovado
- Recibos de verificação
- 2
- Chaves de assinatura que o compilaram
- 2
Ambiente declarado
rust linux x64 rust rust cargo
Ambientes das execuções de verificação
| Ambiente | Contrato | Etapas | Execução |
|---|---|---|---|
| rust 1 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1 |
2026-08-16 |
| rust 1 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1 |
2026-08-18 |
Caso
HOW- Objetivo
- Parse datetime strings with fixed-length fractional seconds followed by trailing literals without ParseError(TooShort), fixed in chrono 0.4.42
- Pacotes
- Símbolos
-
- NaiveDateTime::parse_from_str
- NaiveTime::parse_from_str
- Ambiente
- rust
- Criado
- 2026-08-16T04:52:38Z
Contrato
- assert NaiveDateTime::parse_from_str parses fixed 6-digit fractions followed by literal characters without returning ParseError(TooShort)
- assert NaiveTime::parse_from_str parses fixed 3-digit fractions followed by literal characters without returning ParseError(TooShort)
- assert NaiveDateTime::parse_from_str parses fixed 9-digit fractions followed by literal characters without returning ParseError(TooShort)
Arquivos
- Cargo.lock
- Cargo.toml
- NOTES.md
- csx.json
- src/lib.rs
Código-fonte
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "android_system_properties"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc"
dependencies = [
"libc",
]
[[package]]
name = "autocfg"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "bumpalo"
version = "3.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
[[package]]
name = "cc"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d"
dependencies = [
"find-msvc-tools",
"shlex",
]
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "chrono"
version = "0.4.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
dependencies = [
"iana-time-zone",
"num-traits",
"windows-link",
]
[[package]]
name = "core-foundation-sys"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "csx_chrono_fixed_frac_bugfix"
version = "0.1.0"
dependencies = [
"chrono",
]
[[package]]
name = "find-msvc-tools"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890"
[[package]]
name = "futures-core"
version = "0.3.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
[[package]]
name = "futures-task"
version = "0.3.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
[[package]]
name = "futures-util"
version = "0.3.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
dependencies = [
"futures-core",
"futures-task",
"pin-project-lite",
"slab",
]
[[package]]
name = "iana-time-zone"
version = "0.1.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"log",
"wasm-bindgen",
"windows-core",
]
[[package]]
name = "iana-time-zone-haiku"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
dependencies = [
"cc",
]
[[package]]
name = "js-sys"
version = "0.3.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a"
dependencies = [
"cfg-if",
"futures-util",
"wasm-bindgen",
]
[[package]]
name = "libc"
version = "0.2.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
[[package]]
name = "log"
version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "once_cell"
version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "pin-project-lite"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
[[package]]
name = "proc-macro2"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rustversion"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
[[package]]
name = "shlex"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
[[package]]
name = "slab"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
name = "syn"
version = "2.0.119"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "wasm-bindgen"
version = "0.2.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284"
dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf"
dependencies = [
"unicode-ident",
]
[[package]]
name = "windows-core"
version = "0.62.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
dependencies = [
"windows-implement",
"windows-interface",
"windows-link",
"windows-result",
"windows-strings",
]
[[package]]
name = "windows-implement"
version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "windows-interface"
version = "0.59.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-result"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-strings"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
dependencies = [
"windows-link",
]
[package]
name = "csx_chrono_fixed_frac_bugfix"
version = "0.1.0"
edition = "2021"
[dependencies]
chrono = { version = "=0.4.42", default-features = false, features = ["std", "clock", "alloc"] }
# Chrono Bugfix Release Verification: Fixed-Length Second Fraction Parsing
## Prior Known Solutions Found
During the initial search using `search_known_solution`, the following samples for `pkg:cargo/chrono` were returned from the CodeSampleX cache:
- `sha256:861889cfdd0a5dd5ceeb51b6ec6359baf342d7c5c30f7d1fbc598a53e175fac2`: Gating chrono features without default features (`clock`, `serde`, `Utc::now`).
- `sha256:bb53a07e8a52f98a3d5f6b3a0c79b1070e860b17949e852a6e2f2c015657ec3f`: Chrono non-deprecated constructors and month arithmetic clamping behavior.
Neither sample tests or proves a specific bugfix release boundary.
---
## Release Identification
- **Package**: `chrono` (crates.io / cargo)
- **Fixed Release**: `0.4.42`
- **Broken Releases**: `0.4.41` (and earlier 0.4.x versions such as `0.4.38`)
- **Release Notes Reference**: `chronotope/chrono` GitHub Release `v0.4.42` notes:
> - Fix incorrect parsing of fixed-length second fractions by @chris-leach in [#1705](https://github.com/chronotope/chrono/pull/1705)
- **Related Issue**: Issue [#1592](https://github.com/chronotope/chrono/issues/1592) (*"Err(ParseError(TooShort)) when parsing datetime with trailing 0"*).
---
## What Was Wrong Before (Chrono <= 0.4.41)
When parsing date or time strings containing fixed-length fractional second specifiers (e.g. `%.6f`, `%.3f`, `%.9f`) followed immediately by literal characters (such as `"0"` in format `"%Y-%m-%d %H:%M:%S%.6f0"` against input `"2024-06-03 20:02:48.6800000"`), the fractional second parser improperly matched the input string boundaries.
Instead of consuming only the specified fixed number of fractional digits and allowing the remaining string to match subsequent format tokens, the parser failed with:
```rust
Err(ParseError(TooShort))
```
Every assertion attempting to parse fixed-length fractions with trailing characters fails on Chrono <= 0.4.41.
---
## What the Fixed Release Does (Chrono >= 0.4.42)
Chrono 0.4.42 correctly parses exactly the requested fixed number of fractional digits and passes the remaining stream to subsequent format items.
Given:
```rust
let parsed = NaiveDateTime::parse_from_str(
"2024-06-03 20:02:48.6800000",
"%Y-%m-%d %H:%M:%S%.6f0",
);
```
Chrono 0.4.42 returns:
```rust
Ok(2024-06-03T20:02:48.680)
```
---
## Failure Mode on Broken Versions
The broken version (`chrono = "=0.4.41"`) **fails loudly** at test execution time:
- The parser returns `Err(ParseError(TooShort))` instead of `Ok(...)`.
- `parsed.expect(...)` panics with message:
```text
thread 'test_fixed_length_6_fraction_with_trailing_literal' panicked at src/lib.rs:17:16:
parsing fixed 6-digit nanosecond fraction followed by literal character should succeed: ParseError(TooShort)
```
- All 3 contract test cases fail with exit code `101`.
{"case":{"caseId":"case:sha256:8a6f8f21f122b6f47d03603ae977aca51e5e3a3ba2d5153173cb6c227c4e0914","contract":["assert NaiveDateTime::parse_from_str parses fixed 6-digit fractions followed by literal characters without returning ParseError(TooShort)","assert NaiveTime::parse_from_str parses fixed 3-digit fractions followed by literal characters without returning ParseError(TooShort)","assert NaiveDateTime::parse_from_str parses fixed 9-digit fractions followed by literal characters without returning ParseError(TooShort)"],"goal":"Parse datetime strings with fixed-length fractional seconds followed by trailing literals without ParseError(TooShort), fixed in chrono 0.4.42","kind":"HOW","packages":["pkg:cargo/chrono@0.4.42"],"schemaVersion":1,"symbols":["NaiveDateTime::parse_from_str","NaiveTime::parse_from_str"]},"contractCommand":["cargo","test","--offline"],"environment":{"arch":"x64","ecosystem":"cargo","executionContext":"rust","language":"rust","os":"linux","packageManager":"cargo","runtime":"rust","schemaVersion":1},"license":"MIT-0","packages":["pkg:cargo/chrono@0.4.42"],"schemaVersion":1,"symbols":["NaiveDateTime::parse_from_str","NaiveTime::parse_from_str"],"verifierAdapter":"cargo@1"}
#[cfg(test)]
mod tests {
use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
#[test]
fn test_fixed_length_6_fraction_with_trailing_literal() {
let parsed = NaiveDateTime::parse_from_str(
"2024-06-03 20:02:48.6800000",
"%Y-%m-%d %H:%M:%S%.6f0",
);
let expected = NaiveDate::from_ymd_opt(2024, 6, 3)
.unwrap()
.and_hms_micro_opt(20, 2, 48, 680_000)
.unwrap();
assert_eq!(
parsed.expect("parsing fixed 6-digit nanosecond fraction followed by literal character should succeed"),
expected
);
}
#[test]
fn test_fixed_length_3_fraction_with_trailing_literal() {
let parsed = NaiveTime::parse_from_str(
"20:02:48.1234",
"%H:%M:%S%.3f4",
);
let expected = NaiveTime::from_hms_milli_opt(20, 2, 48, 123).unwrap();
assert_eq!(
parsed.expect("parsing fixed 3-digit millisecond fraction followed by literal character should succeed"),
expected
);
}
#[test]
fn test_fixed_length_9_fraction_with_trailing_literal() {
let parsed = NaiveDateTime::parse_from_str(
"2024-06-03 20:02:48.1234567890",
"%Y-%m-%d %H:%M:%S%.9f0",
);
let expected = NaiveDate::from_ymd_opt(2024, 6, 3)
.unwrap()
.and_hms_nano_opt(20, 2, 48, 123_456_789)
.unwrap();
assert_eq!(
parsed.expect("parsing fixed 9-digit nanosecond fraction followed by literal character should succeed"),
expected
);
}
}