Fix for very unlikely memory leak in res_odbc

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@9071 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Matthew Fredrickson 20 years ago
parent a45394d3e9
commit 54135bacbd

@ -430,39 +430,41 @@ odbc_obj *new_odbc_obj(char *name, char *dsn, char *username, char *password)
{ {
static odbc_obj *new; static odbc_obj *new;
new = malloc(sizeof(odbc_obj)); if (!(new = calloc(1, sizeof(*new))) ||
if (!new) !(new->name = malloc(strlen(name) + 1)) ||
return NULL; !(new->dsn = malloc(strlen(dsn) + 1)))
memset(new, 0, sizeof(odbc_obj)); goto cleanup;
new->env = SQL_NULL_HANDLE;
new->name = malloc(strlen(name) + 1);
if (new->name == NULL)
return NULL;
new->dsn = malloc(strlen(dsn) + 1);
if (new->dsn == NULL)
return NULL;
if (username) { if (username) {
new->username = malloc(strlen(username) + 1); if (!(new->username = malloc(strlen(username) + 1)))
if (new->username == NULL) goto cleanup;
return NULL;
strcpy(new->username, username); strcpy(new->username, username);
} }
if (password) { if (password) {
new->password = malloc(strlen(password) + 1); if (!(new->password = malloc(strlen(password) + 1)))
if (new->password == NULL) goto cleanup;
return NULL;
strcpy(new->password, password); strcpy(new->password, password);
} }
strcpy(new->name, name); strcpy(new->name, name);
strcpy(new->dsn, dsn); strcpy(new->dsn, dsn);
new->env = SQL_NULL_HANDLE;
new->up = 0; new->up = 0;
ast_mutex_init(&new->lock); ast_mutex_init(&new->lock);
return new; return new;
cleanup:
if (new) {
free(new->name);
free(new->dsn);
free(new->username);
free(new->password);
free(new);
}
return NULL;
} }
void destroy_odbc_obj(odbc_obj **obj) void destroy_odbc_obj(odbc_obj **obj)

Loading…
Cancel
Save