No description
  • Scheme 82.9%
  • Shell 9.3%
  • Python 4.1%
  • Makefile 3.5%
  • Common Lisp 0.2%
Find a file
2026-07-30 15:45:56 -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:54 -06:00
.jerboa Security hardening and release readiness 2026-06-23 10:48:56 -06:00
bin Security hardening and release readiness 2026-06-23 10:48:56 -06:00
docs Security hardening and release readiness 2026-06-23 10:48:56 -06:00
scripts Harden runtime input and bootstrap handling 2026-07-11 17:22:54 -06:00
src/jerboa-awk build: convert raw-Chez .sls library source to src/ .ss with generated .sls wrappers 2026-07-24 12:02:10 -06:00
support build: convert raw-Chez .sls library source to src/ .ss with generated .sls wrappers 2026-07-24 12:02:10 -06:00
tests fix(gsub): handle empty matches with awk/gawk advance semantics 2026-07-22 15:49:50 -06:00
.gitignore jpkg: complete binary package setup 2026-07-30 14:55:25 -06:00
.jerbuild build: build jawk with installed jerbuild (no jerboa checkout) 2026-05-28 15:57:17 -06:00
AGENTS.md docs: remove jerboa-emacs restriction 2026-07-30 15:45:56 -06:00
jpkg.lock jpkg: complete binary package setup 2026-07-30 14:55:25 -06:00
jpkg.policy.sexp jpkg: complete binary package setup 2026-07-30 14:55:25 -06:00
jpkg.sexp jpkg: complete binary package setup 2026-07-30 14:55:25 -06:00
LICENSE Switch to MIT license 2026-07-21 13:41:54 -06:00
Makefile build: convert raw-Chez .sls library source to src/ .ss with generated .sls wrappers 2026-07-24 12:02:10 -06:00
README.md Harden runtime input and bootstrap handling 2026-07-11 17:22:54 -06:00
SECURITY.md Security hardening and release readiness 2026-06-23 10:48:56 -06:00

jerboa-awk

jawk is an AWK interpreter implemented in Jerboa Scheme.

Build and Test

make verify
make release-evidence

make verify runs the source security gate, import check, parser regression tests, deterministic parser corpus evidence, native binary build, CLI smoke tests, and secure-default policy tests. make release-evidence also records SBOM/toolchain evidence and a two-pass clean-build reproducibility report for the generated jawk binary, repeated parser corpus output, and target proof status.

Secure Defaults

AWK programs are treated as hostile input unless the caller explicitly opts into legacy AWK capabilities:

  • JAWK_ALLOW_SYSTEM=1 enables system() and pipe redirections.
  • JAWK_ALLOW_FILE_IO=1 enables script-driven print > file and getline < file I/O. CLI input files and -f program files remain supported.
  • JAWK_EXPOSE_ENVIRON=1 exposes a small allowlist of process environment variables through ENVIRON; by default ENVIRON is empty.
  • JAWK_MAX_PROGRAM_CHARS caps program text, default 1 MiB.
  • JAWK_MAX_RECORD_CHARS caps input records, default 1 MiB.
  • JAWK_MAX_REGEX_CACHE_ENTRIES bounds each evaluation's dynamic-regex LRU, default 64. Regex, range-pattern, random-number, and multi-character record-buffer state is never shared between evaluations. Transient caches and buffers are cleared during evaluation cleanup.

Library embeddings must create an independent environment with make-initial-env for each evaluation and use it only from the thread that created it. Runtime entry points reject cross-thread reuse. Concurrent evaluations are supported when each worker creates and owns its own environment.

Generated jawk binaries and native build artifacts are ignored and must not be tracked.

Production support also requires a reviewed JAWK_TARGET_PROOF_FILE with the markers documented in docs/release-evidence.md. JAWK_REQUIRE_TARGET_PROOF=1 fails closed when that target proof is missing or incomplete.

Example

echo "hello world" | ./jawk '{print $1}'
echo "a,b,c" | ./jawk -F, '{print $2}'

Security Docs

  • SECURITY.md
  • docs/threat-model.md
  • docs/parser-hardening.md
  • docs/release-evidence.md