[3.15] gh-155869: Fix data loss in dbm.dumb.reorganize() (GH-155872) (#155874)
hugovk <[email protected]>
| Newsgroups | gmane.comp.python.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://github.com/python/cpython/commit/eb796c56861d3277fa41acf74bc01761fa6d07a2 commit: eb796c56861d3277fa41acf74bc01761fa6d07a2 branch: 3.15 author: Miss Islington (bot) <[email protected]> committer: hugovk <[email protected]> date: 2026-08-19T06:23:39+03:00 summary: [3.15] gh-155869: Fix data loss in dbm.dumb.reorganize() (GH-155872) (#155874) Co-authored-by: Łukasz <[email protected]> files: A Misc/NEWS.d/next/Library/2026-08-15-21-55-31.gh-issue-155869.yRUnQW.rst M Lib/dbm/dumb.py M Lib/test/test_dbm_dumb.py diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py index c1c38da5101a572..a080f4e865508b0 100644 --- a/Lib/dbm/dumb.py +++ b/Lib/dbm/dumb.py @@ -311,6 +311,7 @@ def reorganize(self): reorganize_pos += blocks_occupied * _BLOCKSIZE f.truncate(reorganize_pos) + self._modified = True # Commit changes to index, which were not in-place. self._commit() diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py index 672f9092207cf62..d977a81876df651 100644 --- a/Lib/test/test_dbm_dumb.py +++ b/Lib/test/test_dbm_dumb.py @@ -114,6 +114,16 @@ def test_write_write_read(self): with contextlib.closing(dumbdbm.open(_fname)) as f: self.assertEqual(f[b'1'], b'hello2') + def test_reorganize_persists_changed_offsets(self): + with dumbdbm.open(_fname, 'n') as f: + f[b'deleted'] = b'x' + f[b'retained'] = b'value' + del f[b'deleted'] + f.reorganize() + + with dumbdbm.open(_fname, 'r') as f: + self.assertEqual(f[b'retained'], b'value') + def test_str_read(self): self.init_db() with contextlib.closing(dumbdbm.open(_fname, 'r')) as f: diff --git a/Misc/NEWS.d/next/Library/2026-08-15-21-55-31.gh-issue-155869.yRUnQW.rst b/Misc/NEWS.d/next/Library/2026-08-15-21-55-31.gh-issue-155869.yRUnQW.rst new file mode 100644 index 000000000000000..19f76c176af0629 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-08-15-21-55-31.gh-issue-155869.yRUnQW.rst @@ -0,0 +1,2 @@ +Fix :meth:`!reorganize` in :mod:`dbm.dumb` failing to persist updated value +offsets, which could cause data loss after reopening the database. _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]