Fixed dialog event Coverity warnings (#3846)

This commit is contained in:
sauwming 2024-01-30 13:01:25 +08:00 committed by GitHub
parent d692a9940f
commit e12a8d17a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 119 deletions

View File

@ -564,9 +564,11 @@ static void dlg_event_on_evsub_rx_notify(pjsip_evsub *sub,
} else {
unsigned i;
pj_mutex_lock(dlgev->mutex);
for (i=0; i<dlgev->status.info_cnt; ++i) {
dlgev->status.info[i].dialog_node = NULL;
}
pj_mutex_unlock(dlgev->mutex);
}
/* Notify application. */

View File

@ -329,6 +329,18 @@ pjsua_buddy_get_dlg_event_info( pjsua_buddy_id buddy_id,
pjsua_buddy *buddy;
pj_status_t status;
#define COPY_TO_BUF(status, field) \
if (status.field.slen > 0) { \
if (total + status.field.slen < sizeof(info->buf_)) { \
info->field.ptr = info->buf_ + total; \
pj_strncpy(&info->field, &status.field, status.field.slen); \
total += info->field.slen; \
} else { \
PJ_LOG(4, (THIS_FILE, "Insufficient buffer when copying %s", \
#field)); \
} \
}
PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id), PJ_EINVAL);
pj_bzero(info, sizeof(pjsua_buddy_dlg_event_info));
@ -349,128 +361,24 @@ pjsua_buddy_get_dlg_event_info( pjsua_buddy_id buddy_id,
pj_strncpy(&info->uri, &buddy->uri, sizeof(info->buf_)-total);
total += info->uri.slen;
if (buddy->dlg_ev_status.info[0].dialog_info_state.slen > 0) {
info->dialog_info_state.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_info_state,
&buddy->dlg_ev_status.info[0].dialog_info_state,
buddy->dlg_ev_status.info[0].dialog_info_state.slen);
total += info->dialog_info_state.slen;
}
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_info_state);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_info_entity);
if (buddy->dlg_ev_status.info[0].dialog_info_entity.slen > 0) {
info->dialog_info_entity.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_info_entity,
&buddy->dlg_ev_status.info[0].dialog_info_entity,
buddy->dlg_ev_status.info[0].dialog_info_entity.slen);
total += info->dialog_info_entity.slen;
}
if (buddy->dlg_ev_status.info[0].dialog_state.slen == 0) {
info->dialog_state.ptr = info->buf_ + total;
info->dialog_state = pj_str("NULL");
total += info->dialog_state.slen;
}
if (buddy->dlg_ev_status.info[0].dialog_node) {
info->dialog_id.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_id, &buddy->dlg_ev_status.info[0].dialog_id,
sizeof(info->buf_)-total);
total += info->dialog_id.slen;
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_id);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_call_id);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_remote_tag);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_local_tag);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_direction);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_state);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], dialog_duration);
info->dialog_call_id.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_call_id,
&buddy->dlg_ev_status.info[0].dialog_call_id,
sizeof(info->buf_)-total);
total += info->dialog_call_id.slen;
info->dialog_remote_tag.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_remote_tag,
&buddy->dlg_ev_status.info[0].dialog_remote_tag,
sizeof(info->buf_)-total);
total += info->dialog_remote_tag.slen;
info->dialog_local_tag.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_local_tag,
&buddy->dlg_ev_status.info[0].dialog_local_tag,
sizeof(info->buf_)-total);
total += info->dialog_local_tag.slen;
info->dialog_direction.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_direction,
&buddy->dlg_ev_status.info[0].dialog_direction,
sizeof(info->buf_)-total);
total += info->dialog_direction.slen;
info->dialog_state.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_state,
&buddy->dlg_ev_status.info[0].dialog_state,
buddy->dlg_ev_status.info[0].dialog_state.slen);
total += info->dialog_state.slen;
info->dialog_duration.ptr = info->buf_ + total;
pj_strncpy(&info->dialog_duration,
&buddy->dlg_ev_status.info[0].dialog_duration,
buddy->dlg_ev_status.info[0].dialog_duration.slen);
total += info->dialog_duration.slen;
if (buddy->dlg_ev_status.info[0].local_identity.ptr) {
info->local_identity.ptr = info->buf_ + total;
pj_strncpy(&info->local_identity,
&buddy->dlg_ev_status.info[0].local_identity,
buddy->dlg_ev_status.info[0].local_identity.slen);
total += info->local_identity.slen;
} else {
info->local_identity = pj_str("NULL");
}
if (buddy->dlg_ev_status.info[0].local_identity_display.ptr) {
info->local_identity_display.ptr = info->buf_ + total;
pj_strncpy(&info->local_identity_display,
&buddy->dlg_ev_status.info[0].local_identity_display,
buddy->dlg_ev_status.info[0].local_identity_display.slen);
total += info->local_identity_display.slen;
} else {
info->local_identity_display = pj_str("NULL");
}
if (buddy->dlg_ev_status.info[0].local_target_uri.ptr) {
info->local_target_uri.ptr = info->buf_ + total;
pj_strncpy(&info->local_target_uri,
&buddy->dlg_ev_status.info[0].local_target_uri,
buddy->dlg_ev_status.info[0].local_target_uri.slen);
total += info->local_target_uri.slen;
} else {
info->local_target_uri = pj_str("NULL");
}
if (buddy->dlg_ev_status.info[0].remote_identity.ptr) {
info->remote_identity.ptr = info->buf_ + total;
pj_strncpy(&info->remote_identity,
&buddy->dlg_ev_status.info[0].remote_identity,
buddy->dlg_ev_status.info[0].remote_identity.slen);
total += info->remote_identity.slen;
} else {
info->remote_identity = pj_str("NULL");
}
if (buddy->dlg_ev_status.info[0].remote_identity_display.ptr) {
info->remote_identity_display.ptr = info->buf_ + total;
pj_strncpy(&info->remote_identity_display,
&buddy->dlg_ev_status.info[0].remote_identity_display,
buddy->dlg_ev_status.info[0].remote_identity_display.slen);
total += info->remote_identity_display.slen;
} else {
info->remote_identity_display = pj_str("NULL");
}
if (buddy->dlg_ev_status.info[0].remote_target_uri.ptr) {
info->remote_target_uri.ptr = info->buf_ + total;
pj_strncpy(&info->remote_target_uri,
&buddy->dlg_ev_status.info[0].remote_target_uri,
buddy->dlg_ev_status.info[0].remote_target_uri.slen);
total += info->remote_target_uri.slen;
}
else {
info->remote_target_uri = pj_str("NULL");
}
COPY_TO_BUF(buddy->dlg_ev_status.info[0], local_identity);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], local_identity_display);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], local_target_uri);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], remote_identity);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], remote_identity_display);
COPY_TO_BUF(buddy->dlg_ev_status.info[0], remote_target_uri);
}
/* subscription state and termination reason */