From 5173f8cd07c202153e3b840e293ee0cc0599a04d Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 6 Nov 2005 11:01:37 +0000 Subject: [PATCH] (ef_ptr, ef_read): Oops on bad ID. Some callers rely on these functions to fail at the end of the table. To support that, the first ID beyond the end is not considered bad. (ef_ensure_space): Oops on bad ID. --- src/lib/common/file.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lib/common/file.c b/src/lib/common/file.c index 6ca49ee95..fd6e8c0f2 100644 --- a/src/lib/common/file.c +++ b/src/lib/common/file.c @@ -212,8 +212,10 @@ ef_ptr(int type, int id) ep = &empfile[type]; if (CANT_HAPPEN(!(ep->flags & EFF_MEM) || !ep->cache)) return NULL; - if (id < 0 || id >= ep->fids) - return NULL; /* FIXME can this happen? */ + if (id < 0 || id >= ep->fids) { + CANT_HAPPEN(id != ep->fids); + return NULL; + } return ep->cache + ep->size * id; } @@ -233,10 +235,10 @@ ef_read(int type, int id, void *into) ep = &empfile[type]; if (CANT_HAPPEN(!ep->cache)) return 0; - if (id < 0) - return 0; /* FIXME can this happen? */ - if (id >= ep->fids) + if (id < 0 || id >= ep->fids) { + CANT_HAPPEN(id != ep->fids); return 0; + } if (ep->flags & EFF_MEM) { from = ep->cache + id * ep->size; @@ -506,6 +508,7 @@ ef_ensure_space(int type, int id, int count) { if (ef_check(type) < 0) return 0; + CANT_HAPPEN(id < 0); while (id >= empfile[type].fids) { if (!ef_extend(type, count)) -- 2.43.0