=================================================================== RCS file: /cvs/mandoc/dbm_map.c,v retrieving revision 1.4 retrieving revision 1.8 diff -u -p -r1.4 -r1.8 --- mandoc/dbm_map.c 2016/08/22 16:07:16 1.4 +++ mandoc/dbm_map.c 2017/02/17 14:43:54 1.8 @@ -1,4 +1,4 @@ -/* $Id: dbm_map.c,v 1.4 2016/08/22 16:07:16 schwarze Exp $ */ +/* $Id: dbm_map.c,v 1.8 2017/02/17 14:43:54 schwarze Exp $ */ /* * Copyright (c) 2016 Ingo Schwarze * @@ -100,8 +100,8 @@ dbm_map(const char *fname) } max_offset = be32toh(*dbm_getint(3)) + sizeof(int32_t); if (st.st_size != max_offset) { - warnx("dbm_map(%s): Inconsistent file size %llu (expected %d)", - fname, st.st_size, max_offset); + warnx("dbm_map(%s): Inconsistent file size %lld (expected %d)", + fname, (long long)st.st_size, max_offset); errno = EFTYPE; goto fail; } @@ -143,7 +143,11 @@ void * dbm_get(int32_t offset) { offset = be32toh(offset); - if (offset < 0 || offset >= max_offset) { + if (offset < 0) { + warnx("dbm_get: Database corrupt: offset %d", offset); + return NULL; + } + if (offset >= max_offset) { warnx("dbm_get: Database corrupt: offset %d > %d", offset, max_offset); return NULL; @@ -171,7 +175,7 @@ dbm_getint(int32_t offset) int32_t dbm_addr(const void *p) { - return htobe32((char *)p - dbm_base); + return htobe32((const char *)p - dbm_base); } int