diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-10-18 17:23:07 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-10-18 17:23:07 +0300 |
commit | 852ff1b6e81ce13fdcd1fd4fb272b17d760760b3 (patch) | |
tree | 3113d09e84353d47dfd48b237c8b5e2c62eed869 /src/proto.h | |
parent | 2ff4ae9c745d4b9e6ee36468c81554027f66c35b (diff) | |
download | gdbm-852ff1b6e81ce13fdcd1fd4fb272b17d760760b3.tar.gz gdbm-852ff1b6e81ce13fdcd1fd4fb272b17d760760b3.tar.bz2 |
Attempt recovery in case of invalid next_block header field
* src/gdbmopen.c (validate_header): Return GDBM_NEED_RECOVERY
if next_block is invalid.
(_gdbm_validate_header): New function.
(gdbm_fd_open): Set need_recovery depending on return from validate_header.
(gdbm_open): Bail out on invalid value of GDBM_OPENMASK bits.
* src/proto.h (_gdbm_validate_header): New proto.
* src/recover.c (check_db): Re-validate the header.
* src/gdbmtool.c (export_handler): Fix option processing.
Diffstat (limited to 'src/proto.h')
-rw-r--r-- | src/proto.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/proto.h b/src/proto.h index 02f6f9b..e3b6a45 100644 --- a/src/proto.h +++ b/src/proto.h @@ -53,6 +53,8 @@ void _gdbm_cache_entry_invalidate (GDBM_FILE, int); int gdbm_avail_block_validate (GDBM_FILE dbf, avail_block *avblk); int gdbm_bucket_avail_table_validate (GDBM_FILE dbf, hash_bucket *bucket); +int _gdbm_validate_header (GDBM_FILE dbf); + /* From mmap.c */ int _gdbm_mapped_init (GDBM_FILE); void _gdbm_mapped_unmap (GDBM_FILE); |