Den 13 mars genomfördes en korrigerande version 3.51.3 av den kompakt inbÀddade databashanteraren. SQLite. Projektkoden Àr skriven i C och distribueras som offentlig egendom (public domain).
PÄ grund av bakÄtkompatibilitetsproblem relaterade till vissa nya funktioner drogs versionen 3.52.0 (som slÀpptes den 6 mars) tillbaka.
Ăndringslistan för version 3.51.3:
- Den 3 mars upptÀckte och ÄtgÀrdade en av SQLite:s utvecklare (Dan) en bugg som i sÀllsynta fall kunde leda till att databasen blev korrupt, kallad «WAL-reset bug»:
- Denna bugg uppstÄr endast i databaser som körs i WAL-lÀge, om tvÄ eller fler anslutningar öppnas till samma fil i olika trÄdar eller processer, och om dessa tvÄ anslutningar försöker skriva eller skapa en kontrollpunkt samtidigt.
- Buggen Àr relaterad till datakonflikter under strikta tidsbegrÀnsningar. Under normala driftsförhÄllanden uppstÄr den mycket sÀllan. Utvecklarna kunde aldrig Äterskapa buggen under naturliga förhÄllanden, och de var tvungna att lÀgga till sÀrskild testlogik i SQLite som avsiktligt skapar förhÄllanden för att Äterskapa buggen, för att sÀkerstÀlla att problemet var löst.
- Buggen uppstÄr nÀr:
- En anslutning genomför en kontrollpunkt. Denna första kontrollpunkt mÄste slutföras. Med andra ord, under kontrollpunkten mÄste hela innehÄllet i WAL-filen framgÄngsrikt kopieras tillbaka till databasen och WAL-filen ÄterstÀllas sÄ att den kan ÄterstÀllas.
- SÄ snart den första kontrollpunkten Àr klar, startar en andra.
- Medan den andra kontrollpunkten frÄn steg 2 körs, registrerar en annan databasanslutning en transaktion som ÄterstÀller WAL-filen och skriver nytt innehÄll i början av WAL-filen.
- PÄ grund av datakonflikten beaktar inte den andra kontrollpunkten frÄn steg 2 att WAL-filen har ÄterstÀllts till följd av transaktionen i steg 3. Den andra kontrollpunkten sÀtter ett felaktigt vÀrde för ett av fÀlten i WAL-indexhuvudet. Detta fÀlt anger att en del av WAL-filen redan har registrerats i kontrollpunkten, Àven om sÄ inte Àr fallet.
- Registrering av ytterligare transaktioner leder till en ökning av antalet sidor i WAL-filen, vilket överstiger antalet sidor som fanns vid den första kontrollpunkten frÄn steg 1.
- Senare, nÀr den tredje kontrollpunkten intrÀffar, hoppar den över hela eller delar av transaktionen som registrerades i steg 3. DÀrmed nÄr delar av transaktionen frÄn steg 3 aldrig databasfilen, vilket resulterar i att databasfilen skadas.
- Felet finns troligen i alla versioner av SQLite, frÄn 3.7.0 (21.07.2010) till 3.51.2. Korrigeringar har ocksÄ slÀppts för vissa tidigare versioner: 3.44.6 och 3.50.7.
- Andra mindre korrigeringar.
KĂ€lla: linux.org.ru
