Protect against core dumps in gdbm: don't allow access by key once the

database is closed.  Raise gdbm.error instead.

Bug report #198 submitted by Barry Haddow <bhaddow@orbism.com>.
This commit is contained in:
Fred Drake 2000-02-07 17:19:41 +00:00
parent a710d6e20c
commit da8d216eb2
1 changed files with 8 additions and 2 deletions

View File

@ -155,7 +155,12 @@ register PyObject *key;
if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) ) if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) )
return NULL; return NULL;
if (dp->di_dbm == NULL) {
PyErr_SetString(DbmError,
"GDBM object has already been closed");
return NULL;
}
drec = gdbm_fetch(dp->di_dbm, krec); drec = gdbm_fetch(dp->di_dbm, krec);
if ( drec.dptr == 0 ) { if ( drec.dptr == 0 ) {
PyErr_SetString(PyExc_KeyError, PyErr_SetString(PyExc_KeyError,
@ -180,7 +185,8 @@ PyObject *v, *w;
return -1; return -1;
} }
if (dp->di_dbm == NULL) { if (dp->di_dbm == NULL) {
PyErr_SetString(DbmError, "GDBM object has already been closed"); PyErr_SetString(DbmError,
"GDBM object has already been closed");
return -1; return -1;
} }
dp->di_size = -1; dp->di_size = -1;