Skip to content

fix(security): zip-bejegyzésszám-korlát, szigorú fájljogosultság, allowlist-tesztek - #6

Merged
godavid merged 1 commit into
mainfrom
local/glm-tarhely-glm
Oct 23, 2026
Merged

godavid merged 1 commit into
mainfrom
local/glm-tarhely-glm

Conversation

@godavid

@godavid godavid commented Oct 23, 2026

Copy link
Copy Markdown
Owner

A diffet a GLM 5.3 írta (z.ai, OpenCode-on át), egy Claude-felügyelő ellenőrizte és fogadta el.

Fixes #2
Fixes #3
Fixes #4

Tesztterv: 4 fókuszált tesztfájl, 58 teszt zöld helyben, Biome tiszta. A teljes kapu a PR CI-ja.

Nem kész: a #4 opcionális, launchBrowser-szintű route-tesztje.

Review nitek (nem javítjuk automatikusan):

  • 2000-nél több bejegyzésű valódi levél tartósan a hibalistán marad, és minden futás újra letölti; megfontolandó a kibontás kihagyása figyelmeztetéssel.
  • A mode csak új fájlra és mappára hat; régebbi telepítés mappái és index.jsonl-je 0o755/0o644 marad (chmodSync vagy README-jelzés kellene).
  • src/extract.ts: a komment („semmi nem kerül a célmappába”) csak a szűrőkorlátokra igaz, írási hibánál félkész kibontás maradhat.
  • model: claude-opus-5.5
    effort: high
    round: 1
    sha: 092cdaa
    verdict: clean
    context: fresh
    findings: important 0, nit 3, pre-existing 1
    cost: unknown

🤖 Generated with Claude Code

…t cases

- extractZip rejects zips with more than 2000 entries (empty entries
  bypassed the 200 MB size cap) and writes nothing in that case.
- Downloaded letters, meta.json, extracted files and index.jsonl are
  created 0o600, their directories 0o700, instead of relying on umask.
- isAllowedHost tests pin uppercase, trailing dot, IDN homoglyph and
  punycode, userinfo URL and IP-literal hosts.

Fixes #2
Fixes #3
Fixes #4

Co-Authored-By: GLM 5.3 (z.ai) <noreply@z.ai>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@godavid

godavid commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Review (claude-opus-5.5@high, round 1, fresh context, head 092cdaa)

Important

none

Nit

  • src/tarhely/inbox.ts:159-160 + src/extract.ts:47-49: egy 2000-nél több bejegyzésű, de valódi levél most tartósan hibás lesz. extractZip dob, miután a levélfájl már a lemezen van. A levél a failures listába kerül (inbox.ts:112-116), nem kerül az index.jsonl-be, és minden futás újra letölti és újra elbukik. Ugyanez a minta már megvan a 200 MB-os és a gyanús útvonalas korlátnál, így ez a viselkedés tervezett. A 2000-es küszöb viszont új okot ad rá. Megfontolandó a kibontás kihagyása figyelmeztetéssel az egész levél elbuktatása helyett.
  • src/tarhely/inbox.ts:156-157, src/store/index.ts:43-48: a mode csak az új fájlra és mappára hat. A korábbi verzió által létrehozott outDir, <mailbox.slug> mappa és index.jsonl 0o755/0o644 marad. Ugyanez igaz egy újrapróbált levél már létező fájljára. Az index.ts kommentje ezt kimondja, de a régi telepítéseken a szigorítás nem érvényesül. Ehhez egy chmodSync kellene, vagy a README-ben jelezni.
  • src/extract.ts:41-42: a komment szerint hiba esetén „semmi nem kerül a célmappába”. Ez csak a szűrőben dobott korlátokra igaz. Ha a kiíró ciklus közben jön írási hiba, félkész kibontás marad. Pontosítani kellene: „ha valamelyik szűrő-korlát hibát dob”.

Pre-existing

  • src/extract.ts:66-72: ha két bejegyzés ütközik, a kiíró ciklus félúton elhasal és részleges kibontást hagy. Két példa: a fájl és a/b bejegyzés, vagy kis- és nagybetűben eltérő nevek kis-nagybetű-érzéketlen fájlrendszeren. A hibát a diff nem hozta be, a ciklus az origin/main-en is így működik.

verdict: clean
important 0, nit 3, pre-existing 1

Pre-existing → #7

@godavid

godavid commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

owner-ok — a tulajdonos kérése 2026-10-23-án, a GLM-kvóta prioritáslistája után, az irányító sessionben:

"hajtsd végre ezeket, subagent -ek felügyelnek, te csak összefogod"

Folytatási utasítás, 2026-10-23:

"futtasd te"

@godavid
godavid merged commit 004d769 into main Oct 23, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment