No description
  • Scheme 72.5%
  • Shell 18.6%
  • Makefile 8.5%
  • Common Lisp 0.4%
Find a file
2026-07-30 15:46:51 -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:57 -06:00
.jerboa Resolve security audit findings 2026-07-11 17:22:32 -06:00
corpus/mail Security hardening and release readiness 2026-06-23 10:50:39 -06:00
docs Resolve security audit findings 2026-07-11 17:22:32 -06:00
jerboa-mail perf(encoding): bulk bytevector/string ops for whitespace strip and lossy decode 2026-07-22 13:51:00 -06:00
scripts Resolve security audit findings 2026-07-11 17:22:32 -06:00
support Resolve security audit findings 2026-07-11 17:22:32 -06:00
test fix(mime): fall back gracefully on malformed base64 instead of aborting the parse 2026-07-22 12:01:01 -06:00
.gitignore Security hardening and release readiness 2026-06-23 10:50:39 -06:00
AGENTS.md docs: remove jerboa-emacs restriction 2026-07-30 15:46:51 -06:00
jpkg.sexp Add jpkg packaging 2026-07-21 15:09:25 -06:00
LICENSE Switch to MIT license 2026-07-21 13:42:18 -06:00
Makefile build: add lint target 2026-07-21 11:56:17 -06:00
README.md Resolve security audit findings 2026-07-11 17:22:32 -06:00
SECURITY.md Resolve security audit findings 2026-07-11 17:22:32 -06:00

jerboa-mail

Reusable email parsing and MIME helpers for Jerboa.

The initial scope is read-oriented:

  • RFC 5322 header/body splitting.
  • Header unfolding and lookup.
  • RFC 2047 encoded-word decoding for common UTF-8/ASCII cases.
  • Base64 and quoted-printable content-transfer decoding.
  • Simple MIME parsing for text and multipart messages.
  • Best-effort body selection for CLI mail readers.

Sending helpers can be added later, but this first version is intentionally small and fixture-driven.

Security posture

jerboa-mail parses hostile mail input and remains private/experimental until the release gates in SECURITY.md, docs/threat-model.md, and docs/release-evidence.md are complete.

The parser library is capability-free by design: it does not open files, call the shell, use the network, load dynamic libraries, use FFI, or handle credentials. The local security gate enforces that parser and test source keep that shape.

Default parser limits are exported as parameters for callers that need tighter deployment budgets:

Decoded HTML and MIME metadata are still hostile data. Callers that display mail must follow docs/rendering-policy.md; this library does not sanitize HTML or make body text safe for browser rendering.

  • mail-max-message-chars: 25 MiB.
  • mail-max-header-chars: 256 KiB.
  • mail-max-header-lines: 4096.
  • mail-max-line-chars: 64 KiB.
  • mail-max-transfer-encoded-chars: 25 MiB.
  • mail-max-encoded-word-chars: 64 KiB.
  • mail-max-mime-depth: 16.
  • mail-max-mime-parts: 1024 total nodes across the complete message tree, including the root, multipart containers, and leaves.
  • mail-max-mime-header-chars: 4 MiB total across all MIME nodes.
  • mail-max-mime-decoded-chars: 25 MiB total retained decoded/body text across all MIME leaves.
  • mail-max-boundary-chars: 200.

Development

make test
make corpus-smoke
make fuzz-evidence
make verify
make release-evidence