diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-05-19 17:19:20 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-05-19 17:28:35 +0300 |
commit | 2ed5403c82833c8977171972b6779ec92bcc086f (patch) | |
tree | d7c4b170b8ecc08e32e46653e07f45643c929669 /src/mmap.c | |
parent | d228fddf791187b44839b8d8c40478f3577812a2 (diff) | |
download | gdbm-2ed5403c82833c8977171972b6779ec92bcc086f.tar.gz gdbm-2ed5403c82833c8977171972b6779ec92bcc086f.tar.bz2 |
Improve error checking
* src/bucket.c (_gdbm_get_bucket): Improve validation.
* src/fullio.c (_gdbm_full_read,_gdbm_full_write): Don't overwrite
an already set error.
* src/gdbm.h.in (GDBM_WRONG_OFF_T): Merge with GDBM_BAD_FILE_OFFSET.
(GDBM_BAD_HEADER): New error code.
* src/gdbmdump.c (_gdbm_dump_ascii): Check for database error code.
* src/gdbmerrno.c (gdbm_errlist): Add GDBM_BAD_HEADER
* src/gdbmopen.c (validate_header: Imporve logic.
(_gdbm_init_cache): Initialize bucket_cache
* src/gdbmseq.c (gdbm_firstkey): Check return value
from _gdbm_get_bucket.
* src/mmap.c (_gdbm_mapped_remap): Bail out if current position is bigger
than file size.
Diffstat (limited to 'src/mmap.c')
-rw-r--r-- | src/mmap.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -233,7 +233,12 @@ _gdbm_mapped_remap (GDBM_FILE dbf, off_t size, int flag) dbf->mapped_pos += dbf->mapped_off; dbf->mapped_off = 0; } - + if (pos > file_size) + { + errno = EINVAL; + GDBM_SET_ERRNO (dbf, GDBM_FILE_SEEK_ERROR, TRUE); + return -1; + } return _gdbm_internal_remap (dbf, size); } @@ -271,6 +276,10 @@ _gdbm_mapped_read (GDBM_FILE dbf, void *buffer, size_t len) { int rc; + if (dbf->need_recovery) + return -1; + + /* Disable memory mapping and retry */ dbf->memory_mapping = FALSE; if (lseek (dbf->desc, pos, SEEK_SET) != pos) return total > 0 ? total : -1; @@ -321,6 +330,9 @@ _gdbm_mapped_write (GDBM_FILE dbf, void *buffer, size_t len) { int rc; + if (dbf->need_recovery) + return -1; + dbf->memory_mapping = FALSE; if (lseek (dbf->desc, pos, SEEK_SET) != pos) return total > 0 ? total : -1; |