diff options
author | Ken Raeburn <raeburn@mit.edu> | 2008-06-27 05:41:26 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2008-06-27 05:41:26 +0000 |
commit | 086dcfda3d3857f394c2dc9c75488b0cdfe11d21 (patch) | |
tree | fc4160d7558e5412fa7e16e7babeab60d2e73900 /src/plugins/kdb/db2/kdb_db2.c | |
parent | c0a7e03be880eff10ec93f7d4fcd5a2f8100be02 (diff) | |
download | krb5-086dcfda3d3857f394c2dc9c75488b0cdfe11d21.zip krb5-086dcfda3d3857f394c2dc9c75488b0cdfe11d21.tar.gz krb5-086dcfda3d3857f394c2dc9c75488b0cdfe11d21.tar.bz2 |
Check for strdup failure. Fix a memory leak in one failure case
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20488 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/plugins/kdb/db2/kdb_db2.c')
-rw-r--r-- | src/plugins/kdb/db2/kdb_db2.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/plugins/kdb/db2/kdb_db2.c b/src/plugins/kdb/db2/kdb_db2.c index 1026b73..0aa3c4f 100644 --- a/src/plugins/kdb/db2/kdb_db2.c +++ b/src/plugins/kdb/db2/kdb_db2.c @@ -150,6 +150,10 @@ krb5_db2_get_db_opt(char *input, char **opt, char **val) *opt = malloc((pos - input) + 1); *val = strdup(pos + 1); if (!*opt || !*val) { + free(*opt); + *opt = NULL; + free(*val); + *val = NULL; return ENOMEM; } memcpy(*opt, input, pos - input); @@ -1261,6 +1265,11 @@ krb5_db2_open(krb5_context kcontext, if (opt && !strcmp(opt, "dbname")) { if (dbname) free(dbname); dbname = strdup(val); + if (dbname == NULL) { + free(opt); + free(val); + return ENOMEM; + } } else if (!opt && !strcmp(val, "temporary") ) { tempdb = 1; @@ -1336,6 +1345,11 @@ krb5_db2_create(krb5_context kcontext, char *conf_section, char **db_args) krb5_db2_get_db_opt(*t_ptr, &opt, &val); if (opt && !strcmp(opt, "dbname")) { db_name = strdup(val); + if (db_name == NULL) { + free(opt); + free(val); + return ENOMEM; + } } else if (!opt && !strcmp(val, "temporary")) { tempdb = 1; @@ -1386,6 +1400,11 @@ krb5_db2_create(krb5_context kcontext, char *conf_section, char **db_args) } db_name = strdup(value); + if (db_name == NULL) { + status = ENOMEM; + profile_release_string(value); + goto clean_n_exit; + } status = krb5_db2_db_set_name(kcontext, value, tempdb); profile_release_string(value); if (!status) { @@ -1425,6 +1444,11 @@ krb5_db2_destroy(krb5_context kcontext, char *conf_section, char **db_args) krb5_db2_get_db_opt(*t_ptr, &opt, &val); if (opt && !strcmp(opt, "dbname")) { db_name = strdup(val); + if (db_name == NULL) { + free(opt); + free(val); + return ENOMEM; + } } else if (!opt && !strcmp(val, "temporary")) { tempdb = 1; @@ -1463,6 +1487,10 @@ krb5_db2_destroy(krb5_context kcontext, char *conf_section, char **db_args) } db_name = strdup(value); + if (db_name == NULL) { + status = ENOMEM; + goto clean_n_exit; + } status = krb5_db2_db_set_name(kcontext, value, tempdb); profile_release_string(value); if (status) { @@ -1617,6 +1645,10 @@ krb5_db2_promote_db(krb5_context kcontext, char *conf_section, char **db_args) kdb5_dal_handle *dal_handle = kcontext->dal_handle; krb5_db2_context *db_ctx = dal_handle->db_context; db_name = strdup(db_ctx->db_name); + if (db_name == NULL) { + status = ENOMEM; + goto clean_n_exit; + } } assert(kcontext->dal_handle != NULL); |