• exec/load/filecontents_lib.js exec/tests/filecontents_test.js

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Sep 20 03:31:33 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/32d4aaf66581350ee596b795
    Modified Files:
    exec/load/filecontents_lib.js exec/tests/filecontents_test.js
    Log Message:
    filecontents: record which external lister reached a failure verdict

    The store is shared between hosts, and those hosts do not necessarily have
    the same tools installed. A host with no external lister would record "unreadable" for an ARC, which libarchive cannot read in any form, and a host that does have one would then trust that verdict and refuse to list a file it could read perfectly well.

    A negative record now carries the external lister that reached it, and a
    record whose lister differs from what this host has is treated as stale.
    The version is part of the identity, since builds years apart are in the wild (1.8.1 and 1.10.8 both are) and a format the older one rejects may be one the newer one reads. Successful listings are unaffected: a listing is a listing whoever produced it.

    Detection redirects stdout only, so a missing command reports on stderr and leaves the probe file empty, which holds for both /bin/sh and cmd.exe. The result is cached, and a host with no lister now skips the per-file shell it used to spawn only to fail.

    #1247

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Sep 20 03:31:33 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/5c3806d896c2de5b9d373ea0
    Modified Files:
    exec/load/filecontents_lib.js exec/tests/filecontents_test.js
    Log Message:
    filecontents: qualify a successful listing with the extractor version too

    The failure path recorded the external lister with its version while the success path recorded a bare "lsar", on the reasoning that a listing is never re-examined so the version cannot matter. That misses the one thing the field is good for: identifying, after the fact, listings produced by a build that turned out to be untrustworthy. lsar returns a partial listing for a truncated archive rather than failing, and builds years apart differ on where they draw that line.

    Both paths now use the same identity string. libarchive exposes no version to JavaScript, so the native path stays unqualified, which is honest rather than tidy.

    #1247

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net