fix: close controller-peers-env-fallback validation gaps (bug-1909..1912)

- bug-1912: xce_parse_peers() ignores whitespace around entries and skips
  blank ones, matching xceadmin's resolve_controllers(), so "a=h:1, b=h:2"
  names the second candidate "b" (5 libxce tests + regression case).
- bug-1911: xcecd frees the -l log dir before the -h / --version returns
  (regression case: no LeakSanitizer report, exit 0).
- bug-1910: both version scripts build the apiserver with -mod=vendor
  (as the meson build does) instead of -mod=readonly, so they no longer
  need a Go module cache.
- bug-1909: test-version-startup-consistency.sh accepts exactly the
  dirty-content-fingerprint pairing ('<sha>-<8 hex>' in --version with
  '<sha>-dirty' in the startup log), with self-test cases (e)/(f).

Both version scripts now exit 0 on a dirty tree with XCE_CONTROLLER_PEERS
set; regression script 35/35; xce-build all: C 127/0, scheduler 16/0,
xceadmin 364 passed, no ASAN reports.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-10-03 13:06:58 +00:00
parent 66520e6b1a
commit ef6e562cde
Signed by untrusted user: rshen
GPG key ID: 80533536B0EB651C
7 changed files with 159 additions and 9 deletions

View file

@ -438,6 +438,7 @@ int main(int argc, char* argv[])
* version_buf -- the startup INFO log lines further down keep
* reading the original version_buf, untouched. */
printf("%s\n", version_display_buf);
FREEUP(logdir); /* bug-1911: -l may have allocated it */
return 0;
case 'h':
default:
@ -460,6 +461,7 @@ int main(int argc, char* argv[])
" preserved, e.g. "
"sudo --preserve-env=XCE_CONTROLLER_PEERS xcecd ...\n",
argv[0]);
FREEUP(logdir); /* bug-1911: -l may have allocated it */
return 0;
}
}