diff options
author | Simo Sorce <simo@redhat.com> | 2012-01-31 18:05:18 -0500 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2012-02-01 17:33:10 -0500 |
commit | 6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08 (patch) | |
tree | 57b4a3bb41d32ea893eccf95a885a78f965a1119 /proxy/src | |
parent | dfd649ad65e1628fff8216c14c35354378048f42 (diff) | |
download | gss-proxy-6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08.tar.gz gss-proxy-6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08.tar.xz gss-proxy-6b59083556c019e6be1fe97ca5d1ef4ba2ca3c08.zip |
Fix double free in conversion function
Diffstat (limited to 'proxy/src')
-rw-r--r-- | proxy/src/gp_conv.c | 12 |
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) |