summaryrefslogtreecommitdiffstats
path: root/proxy/src/gp_conv.c
diff options
context:
space:
mode:
Diffstat (limited to 'proxy/src/gp_conv.c')
-rw-r--r--proxy/src/gp_conv.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/proxy/src/gp_conv.c b/proxy/src/gp_conv.c
index f79000d..c0c7c70 100644
--- a/proxy/src/gp_conv.c
+++ b/proxy/src/gp_conv.c
@@ -29,13 +29,26 @@
#include <errno.h>
#include "gp_conv.h"
+void *gp_memdup(void *in, size_t len)
+{
+ void *out;
+
+ out = malloc(len);
+ if (!out) {
+ return NULL;
+ }
+
+ memcpy(out, in, len);
+
+ return out;
+}
+
int gp_conv_octet_string(size_t length, void *value, octet_string *out)
{
- out->octet_string_val = malloc(length);
+ out->octet_string_val = gp_memdup(value, length);
if (!out->octet_string_val) {
return ENOMEM;
}
- memcpy(out->octet_string_val, value, length);
out->octet_string_len = length;
return 0;
}
@@ -75,13 +88,13 @@ int gp_conv_gssx_to_oid_alloc(gssx_OID *in, gss_OID *out)
if (!o) {
return ENOMEM;
}
- o->length = in->octet_string_len;
- o->elements = malloc(o->length);
+ o->elements = gp_memdup(in->octet_string_val,
+ in->octet_string_len);
if (!o->elements) {
free(o);
return ENOMEM;
}
- memcpy(o->elements, in->octet_string_val, o->length);
+ o->length = in->octet_string_len;
return 0;
}
@@ -110,13 +123,13 @@ int gp_conv_gssx_to_buffer_alloc(gssx_buffer *in, gss_buffer_t *out)
return ENOMEM;
}
- o->length = in->octet_string_len;
- o->value = malloc(o->length);
+ o->value = gp_memdup(in->octet_string_val,
+ in->octet_string_len);
if (!o->value) {
free(o);
return ENOMEM;
}
- memcpy(o->value, in->octet_string_val, o->length);
+ o->length = in->octet_string_len;
*out = o;
return 0;
@@ -450,7 +463,8 @@ done:
int gp_copy_utf8string(utf8string *in, utf8string *out)
{
- out->utf8string_val = strdup(in->utf8string_val);
+ out->utf8string_val = gp_memdup(in->utf8string_val,
+ in->utf8string_len);
if (!out->utf8string_val) {
return ENOMEM;
}