The branch, master has been updated
       via  7267de3 py: Fix strict aliasing rules in initpypamtest()
       via  7505e1c py: Fix strict aliasing rules in set_pypamtest_exception()
      from  59ecbfa py: Make sure we do not use failed uninitialized

https://git.samba.org/?p=pam_wrapper.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7267de3e692d4e07645488cde7f54c2d4ffa426d
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 10 17:36:09 2015 +0100

    py: Fix strict aliasing rules in initpypamtest()
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>

commit 7505e1c7f93fae556bb92b19922791bc703b6be1
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 10 17:35:51 2015 +0100

    py: Fix strict aliasing rules in set_pypamtest_exception()
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>

-----------------------------------------------------------------------

Summary of changes:
 src/python/pypamtest.c | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)


Changeset truncated at 500 lines:

diff --git a/src/python/pypamtest.c b/src/python/pypamtest.c
index a1b5dd6..a773733 100644
--- a/src/python/pypamtest.c
+++ b/src/python/pypamtest.c
@@ -260,6 +260,10 @@ set_pypamtest_exception(PyObject *exc,
        PyObject *obj = NULL;
        /* repr_fmt is fixed and contains just %d expansions, so this is safe */
        char test_repr[256] = { '\0' };
+       union {
+               char *str;
+               PyObject *obj;
+       } pypam_str_object;
        const char *strerr;
        const struct pam_testcase *failed = NULL;
 
@@ -291,7 +295,8 @@ set_pypamtest_exception(PyObject *exc,
                PyErr_SetObject(exc, obj);
        }
 
-       Py_XDECREF(test_repr);
+       pypam_str_object.str = test_repr;
+       Py_XDECREF(pypam_str_object.obj);
        Py_XDECREF(obj);
 }
 
@@ -1008,6 +1013,10 @@ PyMODINIT_FUNC initpypamtest(void)
 #endif
 {
        PyObject *m;
+       union {
+               PyTypeObject *type_obj;
+               PyObject *obj;
+       } pypam_object;
        int ret;
 
 #if IS_PYTHON3
@@ -1069,18 +1078,19 @@ PyMODINIT_FUNC initpypamtest(void)
                RETURN_ON_ERROR;
        }
 
-       if (PyType_Ready(&pypamtest_test_case) < 0) {
+       pypam_object.type_obj = &pypamtest_test_case;
+       if (PyType_Ready(pypam_object.type_obj) < 0) {
                RETURN_ON_ERROR;
        }
-       Py_INCREF(&pypamtest_test_case);
-       PyModule_AddObject(m, "TestCase", (PyObject *) &pypamtest_test_case);
+       Py_INCREF(pypam_object.obj);
+       PyModule_AddObject(m, "TestCase", pypam_object.obj);
 
-       if (PyType_Ready(&pypamtest_test_result) < 0) {
+       pypam_object.type_obj = &pypamtest_test_result;
+       if (PyType_Ready(pypam_object.type_obj) < 0) {
                RETURN_ON_ERROR;
        }
-       Py_INCREF(&pypamtest_test_result);
-       PyModule_AddObject(m, "TestResult",
-                          (PyObject *) &pypamtest_test_result);
+       Py_INCREF(pypam_object.obj);
+       PyModule_AddObject(m, "TestResult", pypam_object.obj);
 
 #if IS_PYTHON3
        return m;


-- 
pam wrapper repository

Reply via email to