diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-11 16:21:46 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-11 16:21:46 +0200 |
| commit | 745ec8f8edb32ee7ef0a8c12ab84833216296f73 (patch) | |
| tree | 3ca4dc144b2448553923716fdf54d91526354446 /test/dune | |
| parent | 1203380c4644277a2949d42f4619360c1c0ef1e5 (diff) | |
| download | colitur-745ec8f8edb32ee7ef0a8c12ab84833216296f73.tar.gz colitur-745ec8f8edb32ee7ef0a8c12ab84833216296f73.zip | |
kernel: loaders never escape as an exception, date-spec validates on load
Layer.load narrowed its catch to Sexplib0.Sexp_conv_error.Of_sexp_error,
but rank_of_sexp is caller-supplied and may raise anything -- e.g. a
hand-written rank parser that calls invalid_arg. Overlay.load already
catches every exception from the equivalent call; mirror that here so
layer.mli's "never as an exception" promise actually holds.
Date_spec.t derived its sexp converters with plain ppx_sexp_conv, unlike
Slug and Lang, which hand-write validating parsers specifically so
malformed data is rejected at load. (Fixed (month 13) (day 40)) used to
deserialise cleanly into a spec that simply never resolves -- a saint
quietly vanishing with no diagnostic. t_of_sexp now re-runs the value
through the existing fixed validator, the same shape Slug and Lang
already use.
Covering tests: a Layer.load case where rank_of_sexp raises
Invalid_argument instead of Of_sexp_error (would have escaped
uncaught before this fix); two Date_spec.t_of_sexp cases (month 13,
31 April) that must raise Of_sexp_error rather than silently
constructing an unresolvable spec.
Diffstat (limited to 'test/dune')
0 files changed, 0 insertions, 0 deletions
