mirror of
https://github.com/coturn/coturn.git
synced 2025-11-04 17:01:39 +01:00
Avoid nullptr dereference of server variable in various functions (#1504)
This commit is contained in:
parent
74f279d695
commit
2c45aa731c
@ -228,7 +228,7 @@ static ioa_socket_handle dtls_accept_client_connection(dtls_listener_relay_serve
|
|||||||
ioa_network_buffer_handle nbh) {
|
ioa_network_buffer_handle nbh) {
|
||||||
FUNCSTART;
|
FUNCSTART;
|
||||||
|
|
||||||
if (!ssl) {
|
if (!server || !ssl) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -597,6 +597,11 @@ static int create_new_connected_udp_socket(dtls_listener_relay_server_type *serv
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void udp_server_input_handler(evutil_socket_t fd, short what, void *arg) {
|
static void udp_server_input_handler(evutil_socket_t fd, short what, void *arg) {
|
||||||
|
|
||||||
|
if (!arg) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int cycle = 0;
|
int cycle = 0;
|
||||||
|
|
||||||
dtls_listener_relay_server_type *server = (dtls_listener_relay_server_type *)arg;
|
dtls_listener_relay_server_type *server = (dtls_listener_relay_server_type *)arg;
|
||||||
|
|||||||
@ -383,10 +383,11 @@ void turn_session_info_clean(struct turn_session_info *tsi) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void turn_session_info_add_peer(struct turn_session_info *tsi, ioa_addr *peer) {
|
void turn_session_info_add_peer(struct turn_session_info *tsi, ioa_addr *peer) {
|
||||||
if (tsi && peer) {
|
if (!tsi || !peer) {
|
||||||
{
|
return;
|
||||||
size_t i;
|
}
|
||||||
for (i = 0; i < tsi->main_peers_size; ++i) {
|
|
||||||
|
for (size_t i = 0; i < tsi->main_peers_size; ++i) {
|
||||||
if (addr_eq(peer, &(tsi->main_peers_data[i].addr))) {
|
if (addr_eq(peer, &(tsi->main_peers_data[i].addr))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -399,23 +400,25 @@ void turn_session_info_add_peer(struct turn_session_info *tsi, ioa_addr *peer) {
|
|||||||
tsi->main_peers_size += 1;
|
tsi->main_peers_size += 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (tsi->extra_peers_data) {
|
if (tsi->extra_peers_data) {
|
||||||
size_t sz;
|
for (size_t sz = 0; sz < tsi->extra_peers_size; ++sz) {
|
||||||
for (sz = 0; sz < tsi->extra_peers_size; ++sz) {
|
|
||||||
if (addr_eq(peer, &(tsi->extra_peers_data[sz].addr))) {
|
if (addr_eq(peer, &(tsi->extra_peers_data[sz].addr))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tsi->extra_peers_data =
|
|
||||||
(addr_data *)realloc(tsi->extra_peers_data, (tsi->extra_peers_size + 1) * sizeof(addr_data));
|
addr_data* pTmp = (addr_data *)realloc(tsi->extra_peers_data, (tsi->extra_peers_size + 1) * sizeof(addr_data));
|
||||||
|
if (!pTmp) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tsi->extra_peers_data = pTmp;
|
||||||
addr_cpy(&(tsi->extra_peers_data[tsi->extra_peers_size].addr), peer);
|
addr_cpy(&(tsi->extra_peers_data[tsi->extra_peers_size].addr), peer);
|
||||||
addr_to_string(&(tsi->extra_peers_data[tsi->extra_peers_size].addr),
|
addr_to_string(&(tsi->extra_peers_data[tsi->extra_peers_size].addr),
|
||||||
(uint8_t *)tsi->extra_peers_data[tsi->extra_peers_size].saddr);
|
(uint8_t *)tsi->extra_peers_data[tsi->extra_peers_size].saddr);
|
||||||
tsi->extra_peers_size += 1;
|
tsi->extra_peers_size += 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct tsi_arg {
|
struct tsi_arg {
|
||||||
@ -789,6 +792,9 @@ static ts_ur_super_session *create_new_ss(turn_turnserver *server) {
|
|||||||
// printf("%s: 111.111: session size=%lu\n",__FUNCTION__,(unsigned long)sizeof(ts_ur_super_session));
|
// printf("%s: 111.111: session size=%lu\n",__FUNCTION__,(unsigned long)sizeof(ts_ur_super_session));
|
||||||
//
|
//
|
||||||
ts_ur_super_session *ss = (ts_ur_super_session *)calloc(sizeof(ts_ur_super_session), 1);
|
ts_ur_super_session *ss = (ts_ur_super_session *)calloc(sizeof(ts_ur_super_session), 1);
|
||||||
|
if (!ss) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
ss->server = server;
|
ss->server = server;
|
||||||
get_default_realm_options(&(ss->realm_options));
|
get_default_realm_options(&(ss->realm_options));
|
||||||
put_session_into_map(ss);
|
put_session_into_map(ss);
|
||||||
@ -2080,7 +2086,7 @@ static int tcp_start_connection_to_peer(turn_turnserver *server, ts_ur_super_ses
|
|||||||
ioa_addr *peer_addr, int *err_code, const uint8_t **reason) {
|
ioa_addr *peer_addr, int *err_code, const uint8_t **reason) {
|
||||||
FUNCSTART;
|
FUNCSTART;
|
||||||
|
|
||||||
if (!ss) {
|
if (!server || !ss) {
|
||||||
*err_code = 500;
|
*err_code = 500;
|
||||||
*reason = (const uint8_t *)"Server error: empty session";
|
*reason = (const uint8_t *)"Server error: empty session";
|
||||||
FUNCEND;
|
FUNCEND;
|
||||||
@ -2158,6 +2164,11 @@ static void tcp_peer_accept_connection(ioa_socket_handle s, void *arg) {
|
|||||||
ts_ur_super_session *ss = (ts_ur_super_session *)arg;
|
ts_ur_super_session *ss = (ts_ur_super_session *)arg;
|
||||||
turn_turnserver *server = (turn_turnserver *)(ss->server);
|
turn_turnserver *server = (turn_turnserver *)(ss->server);
|
||||||
|
|
||||||
|
if (!server) {
|
||||||
|
close_ioa_socket(s);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FUNCSTART;
|
FUNCSTART;
|
||||||
|
|
||||||
allocation *a = &(ss->alloc);
|
allocation *a = &(ss->alloc);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user