~ober/jerboa-sed

Imported from ~/mine/jerboa-sed

download snapshot

about

# jerboa-sed

Jerboa `sed` implementation and standalone `jsed` CLI.

## Security Status

This repository is not a production-supported public release yet. It now has a
local release gate:

```sh
make verify
make target-evidence
make release-evidence
```
`make release-evidence` records SBOM/toolchain/PCRE2 evidence and a two-pass
binary reproducibility report using a cleanly prewarmed generated-library input
snapshot for the generated `jsed` binary. It also captures the deterministic
512-case parser corpus evidence and target sed proof status. Production support
requires marker-complete target proof through `JSED_TARGET_PROOF_FILE` with
`JSED_REQUIRE_TARGET_PROOF=1`.

Secure defaults:

- sed script shell execution is disabled unless `JSED_ALLOW_SHELL=1` is set;
- sed script file reads/writes (`r`, `R`, `w`, `W`, `s///w`) are disabled unless
  `JSED_ALLOW_SCRIPT_FILE_IO=1` is set;
- `--sandbox` disables both script shell and script file effects even when the
  opt-in environment variables are set;
- script text and input records are capped by `JSED_MAX_SCRIPT_CHARS` and
  `JSED_MAX_INPUT_LINE_CHARS`, both defaulting to 1 MiB;
- compiled syntax trees are capped by `JSED_MAX_COMMANDS` (65,536 by default,
  with a hard configuration ceiling of 1,000,000 nodes), including labels and
  block containers;
- `-i` creates an unpredictable same-directory file with exclusive,
  no-symlink-following descriptor operations, preserves owner/mode, syncs file
  and directory data, verifies source/temp identities, and atomically renames.
  A source symlink or unavailable native helper fails closed.

CLI input files, `-f` script files, and explicit `-i` in-place edits are treated
as caller intent and are still supported with path validation and taint checks.

## Build And Test

```sh
make parser-corpus
make test
make verify
```

`jsed` depends on the platform `libpcre2-8` runtime library.
Standalone builds also link `support/secure-inplace.c`. Programs embedding the
`(sed main)` library must link and register the `jsed_secure_inplace_*`
symbols listed in `support/ffi-symbols.list` to enable `-i`; without them,
ordinary stream editing works but in-place editing is rejected.

recent commits