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.
This commit is contained in:
r-zakarya
2026-08-21 16:30:57 +01:00
parent 5107ebf7b2
commit 5522089939
3 changed files with 90 additions and 11 deletions
+18
View File
@@ -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