[PATCH 1/2] tdb: Fix possible crash bugs in the python tdb code.

simo idra at samba.org
Tue Dec 11 09:23:58 MST 2012


On Tue, 2012-12-11 at 17:20 +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!
> 
> Signed-off-by: Andreas Schneider <asn at samba.org>
> ---
>  lib/tdb/pytdb.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c
> index ae0e6f8..942a50c 100644
> --- a/lib/tdb/pytdb.c
> +++ b/lib/tdb/pytdb.c
> @@ -164,7 +164,13 @@ 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) {
> +		PyErr_SetObject(PyExc_RuntimeError,
> +				Py_BuildValue("(i,s)",
> +					      TDB_ERR_IO,
> +					      "Failed to reopen database"));
> +		return NULL;
> +	}
>  	Py_RETURN_NONE;
>  }
>  
> @@ -208,8 +214,14 @@ static PyObject *obj_close(PyTdbObject *self)
>  	if (self->closed)
>  		Py_RETURN_NONE;
>  	ret = tdb_close(self->ctx);
> +	if (ret != 0) {
> +		PyErr_SetObject(PyExc_RuntimeError,
> +				Py_BuildValue("(i,s)",
> +					      TDB_ERR_IO,
> +					      "Failed to close database"));
> +		return NULL;
> +	}
>  	self->closed = true;
> -	PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
>  	Py_RETURN_NONE;
>  }
>  

This version is even better:

Reviewed-by: Simo Sorce <idra at samba.org>

-- 
Simo Sorce
Samba Team GPL Compliance Officer <simo at samba.org>
Principal Software Engineer at Red Hat, Inc. <simo at redhat.com>



More information about the samba-technical mailing list