From 138abea88dc89c70fa932a6c0de5df00d44e448f Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Fri, 28 Aug 2026 12:41:36 +0100 Subject: [PATCH] fix(android): Sync ouvrait le coffre sans demander le code Le garde de DoSync ne couvrait que l'empreinte, et les deux protections s'excluent : un cache scelle par un code porte VER_PIN, donc VaultNeedsAuth y est FAUX. Synchroniser reconstruisait le coffre depuis le depot et l'affichait sans que le code soit demande - il ne gardait qu'un bouton sur deux. Exiger un champ rempli n'aurait rien valu : le depot est scelle par le mot de passe de sync, pas par le code, donc rien ici ne le confronte a quoi que ce soit et n'importe quelle frappe serait passee. Seul LoadVault sait si le code est le bon, et c'est "Open vault" qui l'appelle - d'ou le renvoi vers lui. Place AVANT ReconcileWithRemote et PublishPending, qui sortent de DoSync par leurs propres chemins. Co-Authored-By: Claude Opus 5 --- mainApk.pas | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mainApk.pas b/mainApk.pas index 71c8687..d7ad009 100644 --- a/mainApk.pas +++ b/mainApk.pas @@ -2147,6 +2147,28 @@ begin end; WebCall('PM.clearLog()'); + // MEME PORTE QUE L'OUVERTURE, LE CODE DE DEVERROUILLAGE COMPRIS. + // + // Le garde suivant ne couvre que l'empreinte, et les deux protections + // s'excluent : un cache scelle par un code porte VER_PIN, donc VaultNeedsAuth + // y est FAUX et rien ne s'y opposait. Synchroniser reconstruisait alors le + // coffre depuis le depot et l'affichait sans que le code soit demande - il ne + // gardait qu'un bouton sur deux. + // + // ET C'EST L'OUVERTURE QUI VERIFIE, PAS CE GARDE. Un code tape ici ne serait + // confronte a rien : le depot est scelle par le mot de passe de sync, pas par + // le code. Se contenter d'exiger un champ rempli laisserait donc passer + // n'importe quelle frappe. Seul LoadVault sait si le code est le bon, et + // c'est "Open vault" qui l'appelle - d'ou le renvoi vers lui plutot qu'une + // verification recopiee ici. + if VaultNeedsPin and (FVault.Count = 0) then + begin + Status('Open the vault first'); + WebCall('PM.focusPin()'); + Exit; + end; + + // UN COFFRE NE ICI A QUI L'ON DONNE UN DEPOT : il faut fondre les deux, pas // ecraser l'un par l'autre. Sans cela le conteneur local resterait // l'autorite, les enregistrements n'atteindraient jamais le depot, et les