[PATCH] deallocate the conversation response only in case of error

Fixes https://bugzilla.redhat.com/show_bug.cgi?id=679714

Downloaded from:
http://pkgs.fedoraproject.org/cgit/PyPAM.git/plain/PyPAM-0.5.0-nofree.patch

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
diff --git a/PAMmodule.c b/PAMmodule.c
index 03cb799..a7ff8a5 100644
--- a/PAMmodule.c
+++ b/PAMmodule.c
@@ -24,8 +24,6 @@ typedef struct {
     char                *service;
     char                *user;
     PyObject            *callback;
-    struct pam_response *response_data;
-    int                 response_len;
     PyObject            *user_data;
     void                *dlh1, *dlh2;
 } PyPAMObject;
@@ -54,15 +52,6 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg,
 
     Py_INCREF(self);
 
-    if (NULL != self->response_data) {
-        for (int i = 0; i < self->response_len; i++) {
-            free(self->response_data[0].resp);
-        }
-        free(self->response_data);
-        self->response_data = NULL;
-        self->response_len = 0;
-    }
-
     PyObject* msgList = PyList_New(num_msg);
     
     for (int i = 0; i < num_msg; i++) {
@@ -92,6 +81,10 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg,
         char* resp_text;
         int resp_retcode = 0;
         if (!PyArg_ParseTuple(respTuple, "si", &resp_text, &resp_retcode)) {
+            while (i > 0) {
+                free((--spr)->resp);
+                --i;
+            }
             free(*resp);
             Py_DECREF(respList);
             return PAM_CONV_ERR;
@@ -100,10 +93,6 @@ static int PyPAM_conv(int num_msg, const struct pam_message **msg,
         spr->resp_retcode = resp_retcode;
         Py_DECREF(respTuple);
     }
-    
-    // Save this so we can free it later.
-    self->response_data = *resp;
-    self->response_len = PyList_Size(respList);
 
     Py_DECREF(respList);
     
@@ -144,8 +133,6 @@ static PyObject * PyPAM_pam(PyObject *self, PyObject *args)
     p->user = NULL;
     Py_INCREF(Py_None);
     p->callback = Py_None;
-    p->response_data = NULL;
-    p->response_len = 0;
     Py_INCREF(Py_None);
     p->user_data = Py_None;
     
