diff options
author | Greg Hudson <ghudson@mit.edu> | 2011-09-24 12:19:21 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2011-09-24 12:19:21 +0000 |
commit | 998417af98c4690765d533136cf484fd1ce96777 (patch) | |
tree | d3dafff81e1d269732c671478cfb866298e391b8 /src/lib/kdb | |
parent | b99d59f7118476cdeb6707b2315eb9b536be556f (diff) | |
download | krb5-998417af98c4690765d533136cf484fd1ce96777.tar.gz krb5-998417af98c4690765d533136cf484fd1ce96777.tar.xz krb5-998417af98c4690765d533136cf484fd1ce96777.zip |
Fix krb5_dbe_get_strings error handling
The old error handling was incorrect in the case where a strdup() call
returns NULL but realloc() returns non-NULL.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25230 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/kdb')
-rw-r--r-- | src/lib/kdb/kdb5.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/lib/kdb/kdb5.c b/src/lib/kdb/kdb5.c index 4dfe66151a..a3a0d6f49c 100644 --- a/src/lib/kdb/kdb5.c +++ b/src/lib/kdb/kdb5.c @@ -2048,16 +2048,14 @@ krb5_dbe_get_strings(krb5_context context, krb5_db_entry *entry, while (next_attr(&pos, end, &mapkey, &mapval)) { /* Add a copy of mapkey and mapvalue to strings. */ - key = strdup(mapkey); - val = strdup(mapval); newstrings = realloc(strings, (count + 1) * sizeof(*strings)); - if (key == NULL || val == NULL || newstrings == NULL) { - free(key); - free(val); - krb5_dbe_free_strings(context, strings, count); - return ENOMEM; - } + if (newstrings == NULL) + goto oom; strings = newstrings; + key = strdup(mapkey); + val = strdup(mapval); + if (key == NULL || val == NULL) + goto oom; strings[count].key = key; strings[count].value = val; count++; @@ -2066,6 +2064,12 @@ krb5_dbe_get_strings(krb5_context context, krb5_db_entry *entry, *strings_out = strings; *count_out = count; return 0; + +oom: + free(key); + free(val); + krb5_dbe_free_strings(context, strings, count); + return ENOMEM; } krb5_error_code |