mirror of https://github.com/python/cpython
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:
parent
a710d6e20c
commit
da8d216eb2
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue