Subj : exec/load/salib.js To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Sat Jun 27 2026 03:03:33 https://gitlab.synchro.net/main/sbbs/-/commit/c4b60eea8f3ae6a35b927131 Modified Files: exec/load/salib.js Log Message: salib.js: send spamd message from a single read, not file_size()+sendfile() The Content-length announced to spamd was computed from file_size() while the body was delivered separately via sendfile() -- two operations on the same temp file. When that file lives on a soft network mount (e.g. a CIFS loopback), a stat and a later send can disagree under load: the body short-reads while the size call already returned the full length, so spamd rejects the message with "Content-Length mismatch ... protocol error 76" and spamc.js passes it through unscanned. Read the file once into memory and derive Content-length from the bytes actually sent, so the two can never disagree (a short read just scans a shorter message rather than erroring). spamc.js already caps message size, so reading into memory is bounded. Surfaced after enabling mailproc ProcessDNSBL processing tripled the volume flowing through spamc.js. Co-Authored-By: Claude Opus 4.8 --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .