[PATCH 1/2] tdb: Fix possible crash bugs in the python tdb code.
Jelmer Vernooij
jelmer at samba.org
Tue Dec 11 13:03:17 MST 2012
On Tue, 2012-12-11 at 18:26 +0100, Andreas Schneider wrote:
> 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!
Thanks! ACK (feel free to add my Reviewed-By).
Bonus points for a follow-up that adds tests that trigger these error
conditions.
Cheers,
Jelmer
>
> Signed-off-by: Andreas Schneider <asn at samba.org>
> ---
> 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 ae0e6f8..cf77a25 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;
> }
>
More information about the samba-technical
mailing list