/cirkel viel om op een media_json die geen array was
boiert.eu gaf 500 op /cirkel terwijl de voorpagina het deed. De catch in
safeJson ving KAPOTTE json af, maar niet geldige json van het verkeerde TYPE:
een remote server stuurde media_json = "[]" -- een STRING met daarin [] -- en
JSON.parse geeft dan netjes een string terug. Een string heeft geen .map:
TypeError: safeJson(...).map is not a function
at coverMedia (src/routes/circle.js:25)
Een enkele post nam zo de hele pagina mee, en beide paden (met en zonder
?append=1) omdat ze dezelfde mapping delen.
DEZE FOUT WAS AL EENS GEVONDEN EN GEREPAREERD, in views/partials/note-body.ejs,
met de reden erbij: "drie posts van een remote server droegen media_json = '[]'
[...] en daarmee lag de hele Krant plat: een vreemde note nam de pagina mee. Wat
er binnenkomt is niet van ons, dus de vorm moet hier afgedwongen worden en niet
aangenomen." Diezelfde les was in circle.js nooit toegepast -- zelfde data,
andere route.
De drie andere plekken die media_json parsen (ActivityPubService 496, 881, 4659)
dwingen de vorm wel af; die zijn nagelopen en blijven zoals ze zijn.
GEVONDEN ZONDER TOEGANG tot die machine. /cirkel?offset=999999 gaf 200, dus een
lege pagina rendert prima en de fout zat in een RIJ. Daarna van buitenaf
uitgebinaird over ?offset=: rij 19 van de eerste 72. Robin leverde daarna de
stacktrace, die precies dat bevestigde.
Vier tests, met de vorm die het omver haalde als eerste. Gecontroleerd dat ze
bijten: reparatie eruit -> 0 groen, 4 rood; terug -> 4 groen.
Co-Authored-By: Claude Opus 5 <noreply@…>