summaryrefslogtreecommitdiffstats
path: root/src/lib/kdb/kdb5.c
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-09-24 12:19:21 +0000
committerGreg Hudson <ghudson@mit.edu>2011-09-24 12:19:21 +0000
commit998417af98c4690765d533136cf484fd1ce96777 (patch)
treed3dafff81e1d269732c671478cfb866298e391b8 /src/lib/kdb/kdb5.c
parentb99d59f7118476cdeb6707b2315eb9b536be556f (diff)
downloadkrb5-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/kdb5.c')
-rw-r--r--src/lib/kdb/kdb5.c20
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