aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Hrozek <jakub.hrozek@posteo.se>2015-12-16 15:20:48 +0100
committerJakub Hrozek <jakub.hrozek@posteo.se>2015-12-16 15:21:47 +0100
commitb1a54cb225b7a3db6fbf352eb8572cdfbf59619a (patch)
tree2ae146d64711041f2e811225b342be991002c305
parent47a6b64705c11c19e048c0553e454aad91eafc8f (diff)
downloadpam_wrapper-spec.tar.gz
pam_wrapper-spec.tar.xz
pam_wrapper-spec.zip
Coverity: Fix memory leak in libpamtest on errorspec
-rw-r--r--src/libpamtest.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/libpamtest.c b/src/libpamtest.c
index 57945e4..f99c2c7 100644
--- a/src/libpamtest.c
+++ b/src/libpamtest.c
@@ -191,6 +191,20 @@ static int add_to_reply(struct pam_response *reply, const char *str)
return PAM_SUCCESS;
}
+static void free_reply(struct pam_response *reply, int num_msg)
+{
+ int i;
+
+ if (reply == NULL) {
+ return;
+ }
+
+ for (i = 0; i < num_msg; i++) {
+ free(reply[i].resp);
+ }
+ free(reply);
+}
+
static int pamtest_simple_conv(int num_msg,
const struct pam_message **msgm,
struct pam_response **response,
@@ -226,7 +240,7 @@ static int pamtest_simple_conv(int num_msg,
if (prompt != NULL) {
ret = add_to_reply(&reply[ri], prompt);
if (ret != PAM_SUCCESS) {
- /* FIXME - free data? */
+ free_reply(reply, num_msg);
return ret;
}
} else {
@@ -241,6 +255,7 @@ static int pamtest_simple_conv(int num_msg,
prompt = (const char *) \
cctx->data->in_echo_on[cctx->echo_on_idx];
if (prompt == NULL) {
+ free_reply(reply, num_msg);
return PAM_CONV_ERR;
}
@@ -248,7 +263,7 @@ static int pamtest_simple_conv(int num_msg,
if (prompt != NULL) {
ret = add_to_reply(&reply[ri], prompt);
if (ret != PAM_SUCCESS) {
- /* FIXME - free data? */
+ free_reply(reply, num_msg);
return ret;
}
}