On 22/09/2011 21:14, Stefan (metze) Metzmacher wrote:
Hi Matthieu,

diff --git a/source4/ntvfs/posix/python/pyxattr_tdb.c 
b/source4/ntvfs/posix/python/pyxattr_tdb.c
index 2b28aca..a08557e 100644
--- a/source4/ntvfs/posix/python/pyxattr_tdb.c
+++ b/source4/ntvfs/posix/python/pyxattr_tdb.c
@@ -60,9 +60,8 @@ static PyObject *py_wrap_setxattr(PyObject *self, PyObject 
*args)
        status = push_xattr_blob_tdb_raw(eadb, mem_ctx, attribute, filename, -1,
                                                                        &blob);
        if (!NT_STATUS_IS_OK(status)) {
-               PyErr_FromNTSTATUS(status);
                talloc_free(mem_ctx);
-               return NULL;
+               PyErr_NTSTATUS_IS_ERR_RAISE(status);
        }
        talloc_free(mem_ctx);
        Py_RETURN_NONE;
@@ -91,9 +90,8 @@ static PyObject *py_wrap_getxattr(PyObject *self, PyObject 
*args)
        status = pull_xattr_blob_tdb_raw(eadb, mem_ctx, attribute, filename,
                                                                         -1, 
100,&blob);
        if (!NT_STATUS_IS_OK(status) || blob.length<  0) {
-               PyErr_FromNTSTATUS(status);
                talloc_free(mem_ctx);
-               return NULL;
+               PyErr_NTSTATUS_IS_ERR_RAISE(status);
Why this changes? What was the problem?

NT_STATUS_IS_ERR() is not the same as !NT_STATUS_IS_OK()
Well the problem is that without this if your status was != OK you'll get error like instead of getting the right exception. "ERROR(<type 'exceptions.SystemError'>): uncaught exception - error return without exception set"


As PyErr_FromNTSTATUS(status) is not the same as PyErr_SetNTSTATUS(status)

If _IS_ERR is not the same then we need to have this code:
if (!NT_STATUS_IS_OK(status)) {
        PyErr_SetNTSTATUS(status);
        talloc_free(mem_ctx);
        return NULL;
    }

If you have no objection I'll push a fix like that.

--
Matthieu Patou
Samba Team
http://samba.org

Reply via email to