diff options
author | Jakub Hrozek <jakub.hrozek@posteo.se> | 2015-12-16 15:20:48 +0100 |
---|---|---|
committer | Jakub Hrozek <jakub.hrozek@posteo.se> | 2015-12-16 15:21:47 +0100 |
commit | b1a54cb225b7a3db6fbf352eb8572cdfbf59619a (patch) | |
tree | 2ae146d64711041f2e811225b342be991002c305 | |
parent | 47a6b64705c11c19e048c0553e454aad91eafc8f (diff) | |
download | pam_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.c | 19 |
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; } } |