summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-01-31 18:05:18 -0500
committerSimo Sorce <simo@redhat.com>2012-02-01 17:33:10 -0500
commit6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08 (patch)
tree57b4a3bb41d32ea893eccf95a885a78f965a1119
parentdfd649ad65e1628fff8216c14c35354378048f42 (diff)
downloadgss-proxy-6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08.tar.gz
gss-proxy-6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08.tar.xz
gss-proxy-6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08.zip
Fix double free in conversion function
-rw-r--r--proxy/src/gp_conv.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/proxy/src/gp_conv.c b/proxy/src/gp_conv.c
index 0d4d276..573eb27 100644
--- a/proxy/src/gp_conv.c
+++ b/proxy/src/gp_conv.c
@@ -237,7 +237,7 @@ int gp_conv_err_to_gssx_string(uint32_t status, int type, gss_OID oid,
if (str) {
ret = asprintf(&t, "%s, %s", str, (char *)gssbuf.value);
if (ret == -1) {
- ret_maj = ENOMEM;
+ ret = ENOMEM;
} else {
free(str);
str = t;
@@ -245,22 +245,26 @@ int gp_conv_err_to_gssx_string(uint32_t status, int type, gss_OID oid,
} else {
str = strdup((char *)gssbuf.value);
if (!str) {
- ret_maj = ENOMEM;
+ ret = ENOMEM;
}
}
gss_release_buffer(&ret_min, &gssbuf);
}
if (ret_maj) {
+ ret = EINVAL;
goto done;
}
} while (msg_ctx);
ret_str->utf8string_len = strlen(str + 1);
ret_str->utf8string_val = str;
+ ret = 0;
done:
- free(str);
- return ret_maj;
+ if (ret) {
+ free(str);
+ }
+ return ret;
}
int gp_conv_name_to_gssx(gss_name_t in, gssx_name *out)