Author: anthm Date: Fri May 16 12:43:47 2008 New Revision: 8440 Modified: freeswitch/trunk/src/switch_core_db.c freeswitch/trunk/src/switch_core_sqldb.c Log: handle error message leaks and other error conditions, Found by Klockwork (www.klocwork.com) Modified: freeswitch/trunk/src/switch_core_db.c ============================================================================== --- freeswitch/trunk/src/switch_core_db.c (original) +++ freeswitch/trunk/src/switch_core_db.c Fri May 16 12:43:47 2008 @@ -96,6 +96,10 @@ if (errmsg) { *errmsg = err; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SQL ERR [%s]\n", err); + switch_core_db_free(err); + err = NULL; } return ret; Modified: freeswitch/trunk/src/switch_core_sqldb.c ============================================================================== --- freeswitch/trunk/src/switch_core_sqldb.c (original) +++ freeswitch/trunk/src/switch_core_sqldb.c Fri May 16 12:43:47 2008 @@ -71,9 +71,10 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SQL Retry [%s]\n", errmsg); } switch_core_db_free(errmsg); + errmsg = NULL; if (again) { - switch_core_db_exec(db, "end transaction", NULL, NULL, &errmsg); + switch_core_db_exec(db, "end transaction", NULL, NULL, NULL); goto again; } @@ -93,6 +94,7 @@ if (errmsg) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SQL ERR [%s]\n", errmsg); switch_core_db_free(errmsg); + errmsg = NULL; switch_yield(100000); retries--; if (retries == 0 && forever) { @@ -107,7 +109,7 @@ done: - switch_core_db_exec(db, "end transaction", NULL, NULL, &errmsg); + switch_core_db_exec(db, "end transaction", NULL, NULL, NULL); return status; } @@ -234,6 +236,8 @@ { char *sql = NULL; + switch_assert(event); + switch (event->event_id) { case SWITCH_EVENT_ADD_SCHEDULE: sql = switch_mprintf("insert into tasks values('%q','%q','%q','%q')", @@ -282,10 +286,14 @@ ); break; case SWITCH_EVENT_CHANNEL_STATE: - if (event) { + { char *state = switch_event_get_header_nil(event, "channel-state-number"); - switch_channel_state_t state_i = atoi(state); + switch_channel_state_t state_i = CS_DONE; + if (!switch_strlen_zero(state)) { + state_i = atoi(state); + } + switch (state_i) { case CS_HANGUP: case CS_DONE: @@ -300,18 +308,15 @@ switch_event_get_header_nil(event, "caller-destination-number"), switch_event_get_header_nil(event, "caller-dialplan"), switch_event_get_header_nil(event, "caller-context"), - switch_event_get_header_nil(event, "unique-id") - ); + switch_event_get_header_nil(event, "unique-id")); break; default: sql = switch_mprintf("update channels set state='%s' where uuid='%s'", - switch_event_get_header_nil(event, "channel-state"), switch_event_get_header_nil(event, "unique-id") - ); + switch_event_get_header_nil(event, "channel-state"), switch_event_get_header_nil(event, "unique-id")); break; } - + break; } - break; case SWITCH_EVENT_CHANNEL_BRIDGE: sql = switch_mprintf("insert into calls values ('%s', '%ld', '%s','%q','%q','%q','%q','%s','%q','%q','%q','%q','%s')", switch_event_get_header_nil(event, "event-date-local"),
participants (1)
-
Freeswitch SVN