From 7f08365a28770fdcc1bb625d8a16d11d8f15c29a Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 11 Dec 2012 16:51:01 +0100 Subject: [PATCH] tdb: Fix possible crash bugs in the python tdb code. You can't call tdb_error() for tdb_reopen() or tdb_close(), both return the error code of close(2) and not a TDB_ERROR! Reviewed-by: Simo Sorce Reviewed-by: Jelmer Vernooij --- lib/tdb/pytdb.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c index ae0e6f808d7..cf77a252746 100644 --- a/lib/tdb/pytdb.c +++ b/lib/tdb/pytdb.c @@ -164,7 +164,14 @@ static PyObject *obj_reopen(PyTdbObject *self) int ret; PyErr_TDB_RAISE_IF_CLOSED(self); ret = tdb_reopen(self->ctx); - PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx); + if (ret != 0) { + self->closed = true; + PyErr_SetObject(PyExc_RuntimeError, + Py_BuildValue("(i,s)", + TDB_ERR_IO, + "Failed to reopen database")); + return NULL; + } Py_RETURN_NONE; } @@ -209,7 +216,13 @@ static PyObject *obj_close(PyTdbObject *self) Py_RETURN_NONE; ret = tdb_close(self->ctx); self->closed = true; - PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx); + if (ret != 0) { + PyErr_SetObject(PyExc_RuntimeError, + Py_BuildValue("(i,s)", + TDB_ERR_IO, + "Failed to close database")); + return NULL; + } Py_RETURN_NONE; } -- 2.34.1