Skip to content

Commit

Permalink
Fixed dialog event Coverity warnings (#3846)
Browse files Browse the repository at this point in the history
  • Loading branch information
sauwming authored Jan 30, 2024
1 parent d692a99 commit e12a8d1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 120 deletions.
2 changes: 2 additions & 0 deletions pjsip/src/pjsip-simple/dlg_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
148 changes: 28 additions & 120 deletions pjsip/src/pjsua-lib/pjsua_pres.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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;

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], 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);

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 */
Expand Down

0 comments on commit e12a8d1

Please sign in to comment.