2026-08-29 - A one-line disagreement about zero

ftpsrv printed two lines and everybody would read the second:

main-prospero.c:49:malloc: error 0 (orbistoun has no message table)
Unable to change AuthID

The first was the cause. malloc(0) answered null, with a comment explaining that the standard permits it and a conforming caller must not dereference either answer. Every clause true about the standard; this emulator's job is the platform, FreeBSD answers a unique pointer, and real callers write if (!p) fail (D383).

So a program that asked how many processes were running, was told none, and allocated nothing for the list reported a memory failure and gave up on everything after it. It read as a privilege problem.

A permitted behaviour is not automatically the right one. Where a standard allows two answers the question is which one the thing being imitated does, because the callers are real programs written against that thing.

Found only because a payload got far enough to name its own file and line. Nothing in this project's reporting would have caught it: the call succeeded, returned a permitted value, and was recorded as answered.