No description
  • Scheme 69.6%
  • Shell 16%
  • C 5.8%
  • Python 4.7%
  • Makefile 3.7%
  • Other 0.2%
Find a file
2026-07-30 15:47:19 -06:00
.builds ci: set umask 022 in package/verify tasks too (jerbuild creates group-writable cache dirs during pkg operations) 2026-07-22 13:10:58 -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 Harden in-place edits and native loading 2026-07-11 17:25:23 -06:00
src/sed build: convert raw-Chez .sls library source to src/ .ss with generated .sls wrappers 2026-07-24 11:59:36 -06:00
support build: add #!chezscheme to generated .sls wrappers for Chez syntax extensions 2026-07-24 12:02:41 -06:00
tests Harden in-place edits and native loading 2026-07-11 17:25:23 -06:00
.gitignore jpkg: complete binary package setup 2026-07-30 15:11:16 -06:00
.jerbuild Harden in-place edits and native loading 2026-07-11 17:25:23 -06:00
AGENTS.md docs: remove jerboa-emacs restriction 2026-07-30 15:47:19 -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 jpkg: complete binary package setup 2026-07-30 15:11:16 -06:00
LICENSE Switch to MIT license 2026-07-21 13:42:19 -06:00
main.ss fix: l command infinite loop, in-place data loss, range semantics, q/Q commit, octal format, undefined labels 2026-07-21 09:48:20 -06:00
Makefile build: convert raw-Chez .sls library source to src/ .ss with generated .sls wrappers 2026-07-24 11:59:36 -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

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.