summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org>2018-06-16 15:43:46 (GMT)
committer Sergey Poznyakoff <gray@gnu.org>2018-06-16 15:43:46 (GMT)
commit52acc6d5ac3e4bf32924dc0819db19c654889436 (patch) (side-by-side diff)
tree8d4eea9b82bcfdc4eeafbceed2206634ef3d4c89
parent5ea6f531857cb61946456c2582f7eaa20ceba18b (diff)
downloadgdbm-1.15.tar.gz
gdbm-1.15.tar.bz2
Version 1.5v1.15
* configure.ac: Version 1.5 * NEWS: Update. * src/Makefile.am (VI_CURRENT): Increment to 6 * src/bucket.c (_gdbm_get_bucket): Fix the upper limit for bucket_bits. * src/falloc.c (push_avail_block): Fill the allocated block with 0s.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--NEWS17
-rw-r--r--configure.ac4
-rw-r--r--src/Makefile.am2
-rw-r--r--src/bucket.c4
-rw-r--r--src/falloc.c2
-rw-r--r--src/gdbmopen.c2
-rw-r--r--src/gdbmsetopt.c2
-rw-r--r--src/gdbmtool.c2
8 files changed, 21 insertions, 14 deletions
diff --git a/NEWS b/NEWS
index ba245aa..76f7db0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,17 +1,24 @@
-GNU dbm NEWS -- history of user-visible changes. 2018-05-25
+GNU dbm NEWS -- history of user-visible changes. 2018-06-16
Copyright (C) 1990-2018 Free Software Foundation, Inc.
See the end of file for copying conditions.
Please send gdbm bug reports to <bug-gdbm@gnu.org>.
-Version 1.14.90
+Version 1.15 - 2018-06-15
-FIXME: BUMP VI_MAJOR
+* Extensive database consistency checking
-* Implement database consistency checks
+GDBM tries to detect inconsistencies in input database files as
+early as possible. When an inconcistency is detected, a helpful
+diagnostics is returned and the database is marked as needing
+recovery. From this moment on, any GDBM function trying to access
+the database will immediately return error code (instead of
+eventually segfaulting as previous versions did). In order to
+reconstruct the database and return it to healthy state, the
+gdbm_recover function should be used.
Special thanks to Lionel Debroux and Craig Young for investing
their time and efforts in testing and providing valuable feedback.
* Improved error checking
@@ -30,13 +37,13 @@ e.g.:
* Fixed data conversion bugs in storing structured keys or content
* New member in the gdbm_recovery structure: duplicate_keys.
Upon return from gdbm_recover, this member holds the number of keys
-that were not recovered, because the same key has already been stored
+that has not been recovered, because the same key had already been stored
in the database. The actual number of stored keys is thus
recovered_keys - duplicate_keys.
* New error codes.
GDBM_BAD_BUCKET "Malformed bucket header"
diff --git a/configure.ac b/configure.ac
index 48ad675..505ba09 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,14 +13,14 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GDBM. If not, see <http://www.gnu.org/licenses/>. */
m4_define([_GDBM_VERSION_MAJOR], 1)
-m4_define([_GDBM_VERSION_MINOR], 14)
-m4_define([_GDBM_VERSION_PATCH], 90)
+m4_define([_GDBM_VERSION_MINOR], 15)
+dnl m4_define([_GDBM_VERSION_PATCH], 0)
AC_INIT([gdbm],
_GDBM_VERSION_MAJOR._GDBM_VERSION_MINOR[]m4_ifdef([_GDBM_VERSION_PATCH],._GDBM_VERSION_PATCH),
[bug-gdbm@gnu.org],,
[http://www.gnu.org/software/gdbm])
AC_PREREQ(2.69)
diff --git a/src/Makefile.am b/src/Makefile.am
index 0d2ca53..2710bf0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -30,13 +30,13 @@ noinst_HEADERS = \
EXTRA_DIST = gdbm.h.in gdbm.magic
BUILT_SOURCES = gdbm.h gram.h
gram.h: gram.c
# The libraries
-VI_CURRENT = 5
+VI_CURRENT = 6
VI_REVISION = 0
VI_AGE = 0
lib_LTLIBRARIES = libgdbm.la
libgdbm_la_LIBADD = @LTLIBINTL@
diff --git a/src/bucket.c b/src/bucket.c
index a3e8f4e..4b69bbe 100644
--- a/src/bucket.c
+++ b/src/bucket.c
@@ -26,13 +26,13 @@
/* Initializing a new hash buckets sets all bucket entries to -1 hash value. */
void
_gdbm_new_bucket (GDBM_FILE dbf, hash_bucket *bucket, int bits)
{
int index;
-
+
/* Initialize the avail block. */
bucket->av_count = 0;
/* Set the information fields first. */
bucket->bucket_bits = bits;
bucket->count = 0;
@@ -143,13 +143,13 @@ _gdbm_get_bucket (GDBM_FILE dbf, int dir_index)
}
/* Validate the bucket */
bucket = dbf->bucket_cache[lru].ca_bucket;
if (!(bucket->count >= 0
&& bucket->count <= dbf->header->bucket_elems
&& bucket->bucket_bits >= 0
- && bucket->bucket_bits <= GDBM_HASH_BITS))
+ && bucket->bucket_bits <= dbf->header->dir_bits))
{
GDBM_SET_ERRNO (dbf, GDBM_BAD_BUCKET, TRUE);
return -1;
}
/* Validate bucket_avail table */
if (gdbm_bucket_avail_table_validate (dbf, bucket))
diff --git a/src/falloc.c b/src/falloc.c
index 2f21ebe..6571d9b 100644
--- a/src/falloc.c
+++ b/src/falloc.c
@@ -289,13 +289,13 @@ push_avail_block (GDBM_FILE dbf)
&dbf->header->avail.count);
if (new_loc.av_size == 0)
new_loc = get_block (av_size, dbf);
av_adr = new_loc.av_adr;
/* Split the header block. */
- temp = malloc (av_size);
+ temp = calloc (1, av_size);
if (temp == NULL)
{
GDBM_SET_ERRNO (dbf, GDBM_MALLOC_ERROR, TRUE);
_gdbm_fatal (dbf, _("malloc error"));
return -1;
}
diff --git a/src/gdbmopen.c b/src/gdbmopen.c
index 03cc4f4..677f1cf 100644
--- a/src/gdbmopen.c
+++ b/src/gdbmopen.c
@@ -151,13 +151,13 @@ validate_header (gdbm_file_header const *hdr, struct stat const *st)
if (!(hdr->dir_size >= dir_size))
return GDBM_BAD_HEADER;
compute_directory_size (hdr->dir_size, &dir_size, &dir_bits);
if (hdr->dir_bits != dir_bits)
return GDBM_BAD_HEADER;
- if (!(hdr->bucket_size > 0 && hdr->bucket_size > sizeof(hash_bucket)))
+ if (!(hdr->bucket_size > sizeof(hash_bucket)))
return GDBM_BAD_HEADER;
if (hdr->bucket_elems != bucket_element_count (hdr->bucket_size))
return GDBM_BAD_HEADER;
if (((hdr->block_size - sizeof (gdbm_file_header)) / sizeof(avail_elem) + 1)
diff --git a/src/gdbmsetopt.c b/src/gdbmsetopt.c
index f9face0..865f5a5 100644
--- a/src/gdbmsetopt.c
+++ b/src/gdbmsetopt.c
@@ -51,19 +51,19 @@ get_size (void *optval, int optlen, size_t *ret)
static int
setopt_gdbm_setcachesize (GDBM_FILE dbf, void *optval, int optlen)
{
size_t sz;
- /* Optval will point to the new size of the cache. */
if (dbf->bucket_cache != NULL)
{
GDBM_SET_ERRNO (dbf, GDBM_OPT_ALREADY_SET, FALSE);
return -1;
}
+ /* Optval will point to the new size of the cache. */
if (get_size (optval, optlen, &sz))
{
GDBM_SET_ERRNO (dbf, GDBM_OPT_ILLEGAL, FALSE);
return -1;
}
return _gdbm_init_cache (dbf, (sz > 9) ? sz : 10);
diff --git a/src/gdbmtool.c b/src/gdbmtool.c
index 6d56578..d0b2694 100644
--- a/src/gdbmtool.c
+++ b/src/gdbmtool.c
@@ -916,13 +916,13 @@ list_handler (struct handler_param *param)
{
datum nextkey = gdbm_nextkey (gdbm_file, key);
data = gdbm_fetch (gdbm_file, key);
if (!data.dptr)
{
- terror (_("cannot fetch data; the key was:"));
+ terror (_("%s; the key was:"), gdbm_db_strerror (gdbm_file));
datum_format (stderr, &key, dsdef[DS_KEY]);
}
else
{
datum_format (param->fp, &key, dsdef[DS_KEY]);
fputc (' ', param->fp);

Return to:

Send suggestions and report system problems to the System administrator.