v0.1.2 doc update
Test / test (push) Canceled after 0s

This commit is contained in:
lixen committed 2026-10-01 17:21:58 -04:00
1 parent b59d068ff6
commit cede215365
2 files changed
+3 -70

No files matched your search

+3 -11
View File
@@ -1,6 +1,6 @@
# toml # toml
A deterministic TOML subset encoder/decoder using only the standard library. A deterministic TOML subset encoder/decoder using Go standard library.
Requires Go 1.27.1. Requires Go 1.27.1.
```go ```go
@@ -93,14 +93,6 @@ comment tokens. Stop scanning on `TokenEOF` or `TokenError`.
- Embedded struct fields are not promoted. Custom marshal interfaces are not - Embedded struct fields are not promoted. Custom marshal interfaces are not
supported. Decode input containers are the parser's generic maps/slices. supported. Decode input containers are the parser's generic maps/slices.
## Migration from the initial version ## License
Parsed integers now use `int64`, not machine-sized `int`. Update type assertions BSD-3-Clause
on raw parser results. Typed struct destinations keep their declared types.
Previously lossy numeric conversions and nil array elements now error. Mixed
arrays can now be encoded. All changes have regression and fuzz coverage.
Run `go test -race ./...`, `GOARCH=386 go test ./...`, and, for example,
`go test -run '^$' -fuzz '^FuzzRoundTrip$' -fuzztime=30s`.
BSD-3-Clause; see LICENSE.
-59
View File
@@ -1,59 +0,0 @@
# Configuration integration audit
The audit fixes concrete failures in the original release:
- Numeric conversion truncated fractions, accepted float values outside integer
range, rejected ordinary `uint` input, and could not decode full `uint64`.
Checked conversions now operate in the source integer domain and reject loss.
- Parser integers depended on 64-bit `int`. They are now explicitly `int64`;
narrowed destinations retain overflow checks on every architecture.
- Failed decoding could partially overwrite a destination; decoding now commits
only after success. Named string map keys no longer panic, and tags with an
empty name correctly fall back to the field name. Existing pointer defaults
survive updates, and errors do not mutate the original pointee or containers.
- Fixed arrays could be encoded but not decoded. They now decode with exact
length and element-range checks, including nested arrays and arrays of tables.
- Nested table headers failed to quote their component keys. Arrays of interface
table values could encode empty tables. Mixed/nested arrays now encode using
inline tables, and nested keys use the same escaping as scalar keys.
- Backspace/form-feed strings did not decode the escapes emitted by Marshal.
Invalid UTF-8, raw string controls, missing array/inline-table commas and
missing statement separators are rejected.
- Cyclic encoding could overflow the stack. Encoding/decoding and dotted paths
now have depth limits. Numeric keys and unsupported uint64 literals fail
explicitly instead of generating unreadable output. Nil array elements error.
- Numeric key checks now cover decimal keys of any length, including values
beyond int64; the parser and encoder apply the same restriction.
- Formatting an invalid unsigned input could recurse through a cyclic map.
Conversion errors now report the source type without formatting its contents.
- Map decoding and encoder entry collection preallocate from known sizes. All
operation state stays local; no global cache or lock was added.
No datetime, custom marshal interface, literal-string or multiline-string
feature was added. The supported subset and remaining deviations are in README.
This branch consolidates the prior `audit/numeric-hardening-20260928` and
`audit/config-roundtrip-hardening` commits, retaining both in its ancestry.
Only this repository is changed. Consumer migration, watcher publication and
snapshot ownership remain work for the separate config audit.
Verification for this pass: unit and race suites and `go vet` pass on Go 1.27.1;
the 386 test binary cross-compiles. This host cannot execute 386 binaries, so CI
executes that suite. The first CI run caught a test fixture that cast an int64
through machine-sized int before Decode; that fixture now retains its int64.
Regression tests for fixed arrays, pointer defaults and oversized numeric keys
were also run against recovered commit `6384895` and reproduced the failures.
The 15-second round-trip fuzz run passed 71,221 executions. Its property now
fails on unexpected Marshal errors instead of silently skipping them; only the
documented whole-tree depth bound is excluded. Integer fuzzing covers full
uint64 preservation, signed boundaries and uint8 narrowing. CI runs these bounded
fuzz checks on every push and pull request. Refer to the PR checks for final CI
results.
Integration limits: parsed integers are int64; raw assertions must migrate.
Direct Decode can retain the full uint64 range, but file encoding rejects values
above MaxInt64. Interface destinations retain source references, so config must
own its snapshots. Comment text can be collected with the existing lexer and
written as a preamble; Marshal does not preserve source positions. README
documents these contracts and the intentionally limited TOML syntax.