(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.
This commit is contained in:
Markus Armbruster 2005-11-06 11:01:37 +00:00
parent 8d03e1ce8e
commit 5173f8cd07

View file

@ -212,8 +212,10 @@ ef_ptr(int type, int id)
ep = &empfile[type]; ep = &empfile[type];
if (CANT_HAPPEN(!(ep->flags & EFF_MEM) || !ep->cache)) if (CANT_HAPPEN(!(ep->flags & EFF_MEM) || !ep->cache))
return NULL; return NULL;
if (id < 0 || id >= ep->fids) if (id < 0 || id >= ep->fids) {
return NULL; /* FIXME can this happen? */ CANT_HAPPEN(id != ep->fids);
return NULL;
}
return ep->cache + ep->size * id; return ep->cache + ep->size * id;
} }
@ -233,10 +235,10 @@ ef_read(int type, int id, void *into)
ep = &empfile[type]; ep = &empfile[type];
if (CANT_HAPPEN(!ep->cache)) if (CANT_HAPPEN(!ep->cache))
return 0; return 0;
if (id < 0) if (id < 0 || id >= ep->fids) {
return 0; /* FIXME can this happen? */ CANT_HAPPEN(id != ep->fids);
if (id >= ep->fids)
return 0; return 0;
}
if (ep->flags & EFF_MEM) { if (ep->flags & EFF_MEM) {
from = ep->cache + id * ep->size; from = ep->cache + id * ep->size;
@ -506,6 +508,7 @@ ef_ensure_space(int type, int id, int count)
{ {
if (ef_check(type) < 0) if (ef_check(type) < 0)
return 0; return 0;
CANT_HAPPEN(id < 0);
while (id >= empfile[type].fids) { while (id >= empfile[type].fids) {
if (!ef_extend(type, count)) if (!ef_extend(type, count))