Changeset eac3229 in Klonkt


Ignore:
Timestamp:
08/14/2026 03:16:07 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
2091647
Parents:
a5515b4
Message:

/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@…>

Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/circle.js

    ra5515b4 reac3229  
    1616  return typeof u === 'string' && /^https?:\/\//i.test(u) ? u : null;
    1717}
     18/**
     19 * media_json als ARRAY, of leeg.
     20 *
     21 * De catch vangt KAPOTTE json; hij ving niet geldige json van het verkeerde
     22 * TYPE. Een remote server stuurde media_json = "[]" -- een string MET daarin
     23 * `[]` -- en JSON.parse geeft dan netjes een string terug. Een string heeft
     24 * geen .map, en daarmee lag /cirkel op boiert.eu plat: een 500 op de hele
     25 * pagina door een enkele post (rij 19 van 72).
     26 *
     27 * Precies dezelfde fout stond al beschreven en gerepareerd in
     28 * views/partials/note-body.ejs, waar drie vreemde notes de Krant meenamen.
     29 * Die reparatie is hier nooit gekomen -- zelfde data, andere route. Wat er
     30 * binnenkomt is niet van ons, dus de vorm hoort afgedwongen en niet aangenomen.
     31 */
    1832function safeJson(s) {
    19   try { return s ? JSON.parse(s) : []; } catch { return []; }
     33  try {
     34    const v = s ? JSON.parse(s) : [];
     35    return Array.isArray(v) ? v : [];
     36  } catch { return []; }
    2037}
    2138// The cover image + (separately) a cover video from a remote note's media. NEVER use a video/audio
Note: See TracChangeset for help on using the changeset viewer.