Skip to content

Annuaires de noms, destinations et capture web - #89

Merged
theodubus merged 1 commit into
mainfrom
claude/project-discovery-fgt7nj
Sep 11, 2026
Merged

theodubus merged 1 commit into
mainfrom
claude/project-discovery-fgt7nj

Conversation

@theodubus

Copy link
Copy Markdown
Owner

Troisième et dernier lot de la passe bornée : lecture du module d'assainissement de pikepdf (liant qpdf, récupéré depuis PyPI ; les docs de qpdf et de mutool sont injoignables depuis la session, et les dépôts tiers sont hors périmètre).

Le résultat qui compte n'est pas le correctif

Sa liste recoupe la nôtre entrée par entrée sur /Thumb, /PieceInfo, /AF, /Collection et /RichMedia. Un outil mature, qui édite en place, arrive indépendamment à la même liste que celle que la passe a produite en partant de l'énumération du format. C'est la meilleure validation de la méthode qu'on pouvait espérer.

Il en nommait trois que nous n'avions pas testées. Les trois fuyaient.

candidat HTTP audit coverage suite
/SpiderInfo (capture web Acrobat) 200 pass complete corrigé
/Names : URLS, Templates, IDS, … 200 pass complete corrigé
/Dests, aux deux emplacements du format 200 pass complete corrigé
/PieceInfo/SearchIndex 200 pass complete déjà couvert

Deux décisions de forme

/Names/EmbeddedFiles et /Names/JavaScript ne sont pas coupés là. Ils ont déjà leur drapeau, et les couper ici retirerait à un appelant ce qu'il a explicitement choisi de garder. test_carriers_survive_when_the_caller_opts_out garde ce droit de retrait.

Les destinations nommées suivent remove_annotations, plutôt que de partir sans drapeau. Une destination nommée n'existe que pour être visée par un lien : quand les liens partent elle ne coûte rien, quand l'appelant les garde, la couper laisserait un lien pointant dans le vide. C'est le seul drapeau dont la réponse soit la même que celle de ce porteur.

L'index plein texte ne demande aucun code

Acrobat range son index dans /PieceInfo, coupé en entier depuis le premier lot. pikepdf le traite à part et nomme exactement le risque :

avoids a stale index leaking content you intended to edit or redact

Un test le fige quand même, pour qu'un découpage plus fin de /PieceInfo un jour ne rouvre pas ce trou sans qu'on le voie.

191 tests (contre 188), ruff et mypy --strict propres.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LuxbBUCDqSKrotwpp9mTxc


Generated by Claude Code

Troisieme lot : lecture du module d'assainissement de pikepdf (liant qpdf,
recupere depuis PyPI ; les docs de qpdf et de mutool sont injoignables depuis
la session et les depots tiers hors perimetre).

Sa liste recoupe la notre ENTREE PAR ENTREE sur /Thumb, /PieceInfo, /AF,
/Collection et /RichMedia. C'est la meilleure validation possible de la passe :
un outil mature qui edite en place, arrive independamment a la meme liste. Il
en nommait trois que nous n'avions pas testees, et les trois fuyaient.

    /SpiderInfo (capture web)      200  pass  complete  corrige
    /Names URLS+Templates+...      200  pass  complete  corrige
    /Dests, les deux emplacements  200  pass  complete  corrige
    /PieceInfo/SearchIndex         200  pass  complete  deja couvert

Deux decisions de forme. /Names/EmbeddedFiles et /Names/JavaScript ne sont pas
coupes la : ils ont deja leur drapeau, et les couper ici retirerait a un
appelant ce qu'il a explicitement choisi de garder --
test_carriers_survive_when_the_caller_opts_out garde ce droit. Les destinations
nommees suivent remove_annotations plutot qu'aucun drapeau, parce qu'une
destination nommee n'existe que pour etre visee par un lien : quand les liens
partent elle ne coute rien, quand l'appelant les garde, la couper laisserait un
lien pointant dans le vide.

L'index plein texte d'Acrobat ne demande aucun code : il vit dans /PieceInfo,
coupe en entier depuis le premier lot. pikepdf le traite a part et nomme
exactement le risque (« avoids a stale index leaking content you intended to
edit or redact ») ; un test le fige, pour qu'un decoupage plus fin de
/PieceInfo un jour ne rouvre pas ce trou sans qu'on le voie.

191 tests (contre 188), ruff et mypy strict propres.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LuxbBUCDqSKrotwpp9mTxc
@theodubus
theodubus merged commit ff97a5b into main Sep 11, 2026
4 checks passed
@theodubus
theodubus deleted the claude/project-discovery-fgt7nj branch September 11, 2026 21:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants