SQLite 3.51.3 avec correction d'un possible endommagement de la base de données en mode WAL

SQLite 3.51.3 avec correction d'un possible endommagement de la base de données en mode WAL

Le 13 mars, une mise à jour corrective de la base de données intégrée 3.51.3 a eu lieu. SQLite. Le code du projet est écrit en C et est distribué comme domaine public.

En raison de problèmes de rétrocompatibilité associés à certaines nouvelles fonctionnalités, la version 3.52.0 (publiée le 6 mars) a été retirée.

Liste des modifications de la version 3.51.3 :

  • Le 3 mars, l'un des développeurs de SQLite (Dan) a découvert et corrigé un bogue qui, dans des cas rares, pouvait entraîner la corruption de la base de données, nommé « bogue de réinitialisation WAL »:
    • Ce bogue se produit uniquement dans les bases de données fonctionnant en mode WAL, si plus d'une connexion est ouverte sur le même fichier dans différents threads ou processus, et si ces deux connexions essaient d'effectuer une écriture ou de créer un point de contrôle simultanément.
    • Le bogue est lié à un conflit d'accès aux données sous des contraintes de temps strictes. Dans des conditions normales d'exploitation, il se produit très rarement. Les développeurs n'ont pas réussi à reproduire ce bogue dans des conditions naturelles et ont dû ajouter une logique de test spéciale dans SQLite qui crée intentionnellement les conditions pour provoquer le bogue, afin de s'assurer que le problème est corrigé.
    • Le bogue se produit lorsque :
      1. Une connexion effectue une vérification de point de contrôle. Cette première vérification doit être terminée. En d'autres termes, lors de la vérification, il est nécessaire de copier avec succès tout le contenu du fichier WAL dans la base de données et de ramener le fichier WAL à un état où il peut être réinitialisé.
      2. Juste après la fin de la première vérification de point de contrôle, un deuxième point de contrôle est lancé.
      3. Alors que le deuxième point de contrôle du point 2 est lancé, une autre connexion à la base de données valide une transaction qui réinitialise le fichier WAL et écrit un nouveau contenu au début du fichier WAL.
      4. En raison d'un conflit d'accès aux données, le second point de contrôle du point 2 ne prend pas en compte que le fichier WAL a été réinitialisé à la suite de la validation de la transaction au point 3. Le deuxième point de contrôle établit une valeur incorrecte pour l'un des champs de l'en-tête du WAL. Ce champ indique qu'une partie du fichier WAL a déjà été validée dans un point de contrôle, alors qu'en réalité, ce n'est pas le cas.
      5. La validation de transactions supplémentaires entraîne une augmentation du nombre de pages dans le fichier WAL, dépassant le nombre de pages existant au moment du premier point de contrôle du point 1.
      6. Plus tard, lorsque le troisième point de contrôle se produit, il ignore toute ou partie de la transaction enregistrée à l'étape 3. Par conséquent, les parties de la transaction de l'étape 3 ne sont jamais enregistrées dans le fichier de base de données, ce qui entraîne une corruption du fichier de base de données.
    • Le bug est probablement présent dans toutes les versions de SQLite, depuis 3.7.0 (21.07.2010) jusqu'à 3.51.2. Des correctifs ont également été publiés pour certaines versions antérieures : 3.44.6 et 3.50.7.
  • D'autres corrections mineures.

Source : linux.org.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster