summaryrefslogtreecommitdiffstats
path: root/src/lib/gssapi/krb5
diff options
context:
space:
mode:
authorSam Hartman <hartmans@mit.edu>2011-10-14 14:46:57 +0000
committerSam Hartman <hartmans@mit.edu>2011-10-14 14:46:57 +0000
commit061933984e3fe8ee630d9daed7cbcc72432005d5 (patch)
tree77ab94af222405cbaef59cd891bcfecc9386ae42 /src/lib/gssapi/krb5
parentc7026a71b2eb4000fa6a78107f1427a555cbdd8a (diff)
downloadkrb5-061933984e3fe8ee630d9daed7cbcc72432005d5.tar.gz
krb5-061933984e3fe8ee630d9daed7cbcc72432005d5.tar.xz
krb5-061933984e3fe8ee630d9daed7cbcc72432005d5.zip
gssalloc memory management for gss_buffer_set
compiles, but untested Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com> git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25341 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/gssapi/krb5')
-rw-r--r--src/lib/gssapi/krb5/naming_exts.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/lib/gssapi/krb5/naming_exts.c b/src/lib/gssapi/krb5/naming_exts.c
index f6c02e870..9d66df38b 100644
--- a/src/lib/gssapi/krb5/naming_exts.c
+++ b/src/lib/gssapi/krb5/naming_exts.c
@@ -231,15 +231,22 @@ kg_data_list_to_buffer_set_nocopy(krb5_data **pdata,
;
set->count = i;
- set->elements = calloc(i, sizeof(gss_buffer_desc));
+ set->elements = gssalloc_calloc(i, sizeof(gss_buffer_desc));
if (set->elements == NULL) {
gss_release_buffer_set(&minor_status, &set);
return ENOMEM;
}
- for (i = 0; i < set->count; i++) {
- set->elements[i].length = data[i].length;
- set->elements[i].value = data[i].data;
+ /*
+ * Copy last element first so data remains properly
+ * NULL-terminated in case of allocation failure
+ * in data_to_gss() on windows.
+ */
+ for (i = set->count-1; i >= 0; i--) {
+ if (data_to_gss(&data[i], &set->elements[i])) {
+ gss_release_buffer_set(&minor_status, &set);
+ return ENOMEM;
+ }
}
free(data);