Changeset 4826


Ignore:
Timestamp:
Apr 24, 2014 9:45:52 AM (11 years ago)
Author:
riza
Message:

Misc (re #1751): Fix crash when retrieving dynamic choice(video stream info) caused by the use of invalid array index.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app_cli.c

    r4729 r4826  
    370370                /* Fill buddy id */ 
    371371                pj_ansi_snprintf(data_out, sizeof(data_out), "%d", ids[i]+1); 
    372                 pj_strdup2(param->pool, &param->choice[i].value, data_out); 
     372                pj_strdup2(param->pool, &param->choice[param->cnt].value,  
     373                           data_out); 
    373374                pj_bzero(data_out, PJ_ARRAY_SIZE(data_out)); 
    374375 
     
    382383                                info.uri.ptr); 
    383384 
    384                 pj_strdup2(param->pool, &param->choice[i].desc, data_out); 
     385                pj_strdup2(param->pool, &param->choice[param->cnt].desc,  
     386                           data_out); 
    385387                if (++param->cnt >= (param->max_cnt-1)) 
    386388                    break; 
     
    390392            /* Add URL input option */ 
    391393            pj_ansi_snprintf(data_out, sizeof(data_out), "URL"); 
    392             pj_strdup2(param->pool, &param->choice[i].value, data_out); 
     394            pj_strdup2(param->pool, &param->choice[param->cnt].value, data_out); 
    393395            pj_ansi_snprintf(data_out, sizeof(data_out), "An URL"); 
    394             pj_strdup2(param->pool, &param->choice[i].desc, data_out); 
     396            pj_strdup2(param->pool, &param->choice[param->cnt].desc, data_out); 
    395397            ++param->cnt; 
    396398        } 
     
    425427            pj_bzero(buf, sizeof(buf)); 
    426428            pj_ansi_snprintf(buf, sizeof(buf), "%d", acc_ids[i]); 
    427             pj_strdup2(param->pool, &param->choice[i].value, buf); 
    428             pj_strdup2(param->pool, &param->choice[i].desc, buf_out); 
     429            pj_strdup2(param->pool, &param->choice[param->cnt].value, buf); 
     430            pj_strdup2(param->pool, &param->choice[param->cnt].desc, buf_out); 
    429431            if (++param->cnt >= param->max_cnt) 
    430432                break; 
     
    452454        pj_ansi_snprintf(slot_id, sizeof(slot_id), 
    453455                         "%d", info.slot_id); 
    454         pj_strdup2(param->pool, &param->choice[i].value, slot_id); 
     456        pj_strdup2(param->pool, &param->choice[param->cnt].value, slot_id); 
    455457 
    456458        txlist[0] = '\0'; 
     
    471473               txlist); 
    472474 
    473         pj_strdup2(param->pool, &param->choice[i].desc, desc); 
     475        pj_strdup2(param->pool, &param->choice[param->cnt].desc, desc); 
    474476        if (++param->cnt >= param->max_cnt) 
    475477            break; 
     
    521523                    pj_ansi_snprintf(med_idx, sizeof(med_idx), "%d", 
    522524                                     call_info.media[i].index); 
    523                     pj_strdup2(param->pool, &param->choice[i].value, med_idx); 
     525                    pj_strdup2(param->pool, &param->choice[param->cnt].value,  
     526                               med_idx); 
    524527 
    525528                    switch (call_info.media[i].status) { 
    526529                    case PJSUA_CALL_MEDIA_NONE: 
    527                         pj_strdup2(param->pool, &param->choice[i].desc, 
     530                        pj_strdup2(param->pool, &param->choice[param->cnt].desc, 
    528531                                   "Status:None"); 
    529532                        break; 
    530533                    case PJSUA_CALL_MEDIA_ACTIVE: 
    531                         pj_strdup2(param->pool, &param->choice[i].desc, 
     534                        pj_strdup2(param->pool, &param->choice[param->cnt].desc, 
    532535                                   "Status:Active"); 
    533536                        break; 
    534537                    case PJSUA_CALL_MEDIA_LOCAL_HOLD: 
    535                         pj_strdup2(param->pool, &param->choice[i].desc, 
     538                        pj_strdup2(param->pool, &param->choice[param->cnt].desc, 
    536539                                   "Status:Local Hold"); 
    537540                        break; 
    538541                    case PJSUA_CALL_MEDIA_REMOTE_HOLD: 
    539                         pj_strdup2(param->pool, &param->choice[i].desc, 
     542                        pj_strdup2(param->pool, &param->choice[param->cnt].desc, 
    540543                                   "Status:Remote Hold"); 
    541544                        break; 
    542545                    case PJSUA_CALL_MEDIA_ERROR: 
    543                         pj_strdup2(param->pool, &param->choice[i].desc, 
     546                        pj_strdup2(param->pool, &param->choice[param->cnt].desc, 
    544547                                   "Status:Media Error"); 
    545548                        break; 
     
    655658            pjsua_vid_win_get_info(wids[i], &wi); 
    656659            pj_ansi_snprintf(win_id, sizeof(win_id), "%d", wids[i]); 
    657             pj_strdup2(param->pool, &param->choice[i].value, win_id); 
     660            pj_strdup2(param->pool, &param->choice[param->cnt].value, win_id); 
    658661 
    659662            pj_ansi_snprintf(desc, sizeof(desc), 
     
    662665                             wi.size.w, wi.size.h); 
    663666 
    664             pj_strdup2(param->pool, &param->choice[i].desc, desc); 
     667            pj_strdup2(param->pool, &param->choice[param->cnt].desc, desc); 
    665668            if (++param->cnt >= param->max_cnt) 
    666669                break; 
     
    690693                pjsua_call_get_info(ids[i], &call_info); 
    691694                pj_ansi_snprintf(call_id, sizeof(call_id), "%d", ids[i]); 
    692                 pj_strdup2(param->pool, &param->choice[i].value, call_id); 
     695                pj_strdup2(param->pool, &param->choice[param->cnt].value,  
     696                           call_id); 
    693697                pj_ansi_snprintf(desc, sizeof(desc), "%.*s [%.*s]", 
    694698                    (int)call_info.remote_info.slen, 
     
    696700                    (int)call_info.state_text.slen, 
    697701                    call_info.state_text.ptr); 
    698                 pj_strdup2(param->pool, &param->choice[i].desc, desc); 
     702                pj_strdup2(param->pool, &param->choice[param->cnt].desc, desc); 
    699703                if (++param->cnt >= param->max_cnt) 
    700704                    break; 
Note: See TracChangeset for help on using the changeset viewer.