No description
  • Scheme 68.1%
  • Shell 17.5%
  • C 5.6%
  • Python 4.8%
  • Makefile 3.7%
  • Other 0.3%
Find a file
ober d9c397534c
Some checks failed
required-ci / required (push) Failing after 3m43s
Merge pull request #7
2026-09-19 16:43:40 -04:00
.forgejo Use FreeBSD Forgejo CI runner 2026-08-03 14:51:13 -06:00
.jerboa Security hardening and release readiness 2026-06-23 10:51:10 -06:00
docs Security hardening and release readiness 2026-06-23 10:51:10 -06:00
scripts fix: resolve sed WPO compiler symbol conflict 2026-09-10 19:27:23 -06:00
src/sed fix: avoid static string prefix collision 2026-09-10 23:31:14 -06:00
support fix: use (scheme) instead of (except (chezscheme)) in sls wrapper 2026-08-06 17:44:22 -06:00
tests fix: resolve sed WPO compiler symbol conflict 2026-09-10 19:27:23 -06:00
.gitignore jpkg: complete binary package setup 2026-07-30 15:11:16 -06:00
.gitsafeignore Set up Forgejo CI/CD policy 2026-08-03 12:50:52 -06:00
.jerbuild Harden in-place edits and native loading 2026-07-11 17:25:23 -06:00
AGENTS.md docs(agents): add checkout hygiene policy (work dirs under ~/work, cleanup when done) 2026-09-12 19:09:24 -06:00
jpkg.lock jpkg: complete binary package setup 2026-07-30 15:11:16 -06:00
jpkg.policy.sexp jpkg: complete binary package setup 2026-07-30 15:11:16 -06:00
jpkg.sexp Use FreeBSD Forgejo CI runner 2026-08-03 14:51:13 -06:00
LICENSE Switch to MIT license 2026-07-21 13:42:19 -06:00
main.ss fix: avoid static string prefix collision 2026-09-10 23:31:14 -06:00
Makefile fix: add transpile dependency to import-check 2026-08-06 15:55:35 -06:00
README.md Harden in-place edits and native loading 2026-07-11 17:25:23 -06:00
SECURITY.md Harden in-place edits and native loading 2026-07-11 17:25:23 -06:00
VERSION fix: avoid static string prefix collision 2026-09-10 23:31:14 -06:00

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:

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

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.