diff options
| author | Sam Hartman <hartmans@mit.edu> | 2011-10-14 14:46:57 +0000 |
|---|---|---|
| committer | Sam Hartman <hartmans@mit.edu> | 2011-10-14 14:46:57 +0000 |
| commit | 061933984e3fe8ee630d9daed7cbcc72432005d5 (patch) | |
| tree | 77ab94af222405cbaef59cd891bcfecc9386ae42 /src/lib/gssapi/krb5 | |
| parent | c7026a71b2eb4000fa6a78107f1427a555cbdd8a (diff) | |
| download | krb5-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.c | 15 |
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); |
