From 5522089939c18b334f56c0e26af6f9ecb3c12867 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Fri, 21 Aug 2026 16:30:57 +0100 Subject: [PATCH] fix(android): the unlock code no longer changes by itself It went from 0000 to 00000000 with nobody deciding it. The typed code and the code the cache is sealed under were the same variable, so every write of the cache re-sealed under whatever sat in the field - a sync, which asks for no code at all, was enough to change it, silently. They are two things now. Only opening the vault touches the seal, because that is the one moment we know the current code is known: the decryption just proved it. Everything else - sync, background refresh, saving an entry - rewrites the cache under the code already in place. Hence a second field, shown only once a code exists: the current one must open the vault for the new one to take. Without it this fix would have locked the device under the code set by accident, which is exactly the harm it is meant to prevent. --- android-client/PLAN.md | 18 +++++++++++ android-client/web/app.html | 24 +++++++++++++-- mainApk.pas | 59 +++++++++++++++++++++++++++++++------ 3 files changed, 90 insertions(+), 11 deletions(-) diff --git a/android-client/PLAN.md b/android-client/PLAN.md index 61c7946..f72ec3e 100644 --- a/android-client/PLAN.md +++ b/android-client/PLAN.md @@ -813,6 +813,24 @@ Deux corrections antérieures, posées par raisonnement sans instrument, reposaient toutes deux sur une mesure qui vaut zéro ici. La leçon vaut d'être écrite : sur cet écran, **instrumenter d'abord**. +### Le code se changeait tout seul — corrigé 2026-08-21 + +Le code du cache est passé de `0000` à `00000000` sans que personne ne le +décide. Cause : **le code tapé et le code sous lequel le cache est scellé +étaient la même variable**, et toute écriture du cache rescellait donc sous ce +qui traînait dans le champ. Une synchronisation — qui ne demande pourtant aucun +code — suffisait à le changer, en silence. + +Les deux sont séparés maintenant. Seule **l'ouverture du coffre** touche au +sceau, parce que c'est le seul moment où l'on sait que l'utilisateur connaît le +code courant : le déchiffrement vient de le prouver. Tout le reste — sync, +rafraîchissement de fond, enregistrement d'entrée — réécrit le cache sous le +code déjà en place. + +D'où un second champ, *new unlock code*, visible seulement quand un code existe : +il faut ouvrir avec l'actuel pour que le nouveau prenne. Sans lui, la correction +aurait enfermé l'appareil sous le code posé par accident. + ### Ce qui devient facultatif Sans dépôt configuré, *Sync* n'a rien à faire : les réglages du serveur diff --git a/android-client/web/app.html b/android-client/web/app.html index eea1719..6c1b991 100644 --- a/android-client/web/app.html +++ b/android-client/web/app.html @@ -289,6 +289,18 @@ type="password" inputmode="numeric" autocomplete="off">
×
+ +