Changeset 2995


Ignore:
Timestamp:
Nov 9, 2009 5:18:12 AM (10 years ago)
Author:
bennylp
Message:

Ticket #988: Aray bounds checking in SDP functions (thanks Mark Webster for the report)

Location:
pjproject/trunk/pjmedia
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia/sdp.h

    r2394 r2995  
    653653 
    654654 
     655/** 
     656 * Add new attribute to the session descriptor. 
     657 * 
     658 * @param s             The SDP session description. 
     659 * @param attr          Attribute to add. 
     660 * 
     661 * @return              PJ_SUCCESS or the appropriate error code. 
     662 */ 
     663PJ_DECL(pj_status_t) pjmedia_sdp_session_add_attr(pjmedia_sdp_session *m, 
     664                                                  pjmedia_sdp_attr *attr); 
     665 
     666 
    655667PJ_END_DECL 
    656668 
  • pjproject/trunk/pjmedia/src/pjmedia/sdp.c

    r2927 r2995  
    175175 
    176176 
     177 
    177178PJ_DEF(pj_status_t) pjmedia_sdp_attr_add(unsigned *count, 
    178179                                         pjmedia_sdp_attr *attr_array[], 
     
    679680{ 
    680681    return pjmedia_sdp_attr_add(&m->attr_count, m->attr, attr); 
     682} 
     683 
     684PJ_DEF(pj_status_t) pjmedia_sdp_session_add_attr(pjmedia_sdp_session *s, 
     685                                                 pjmedia_sdp_attr *attr) 
     686{ 
     687    return pjmedia_sdp_attr_add(&s->attr_count, s->attr, attr); 
    681688} 
    682689 
     
    979986    med->desc.fmt_count = 0; 
    980987    while (*scanner->curptr == ' ') { 
     988        pj_str_t fmt; 
     989 
    981990        pj_scan_get_char(scanner); 
    982991 
     
    985994                break; 
    986995 
    987         pj_scan_get(scanner, &cs_token, &med->desc.fmt[med->desc.fmt_count++]); 
     996        pj_scan_get(scanner, &cs_token, &fmt); 
     997        if (med->desc.fmt_count < PJMEDIA_MAX_SDP_FMT) 
     998            med->desc.fmt[med->desc.fmt_count++] = fmt; 
     999        else 
     1000            PJ_PERROR(2,(THIS_FILE, PJ_ETOOMANY,  
     1001                         "Error adding SDP media format %.*s, " 
     1002                         "format is ignored", 
     1003                         (int)fmt.slen, fmt.ptr)); 
    9881004    } 
    9891005 
     
    10831099                    if (attr) { 
    10841100                        if (media) { 
    1085                             media->attr[media->attr_count++] = attr; 
     1101                            pjmedia_sdp_media_add_attr(media, attr); 
    10861102                        } else { 
    1087                             session->attr[session->attr_count++] = attr; 
     1103                            pjmedia_sdp_session_add_attr(session, attr); 
    10881104                        } 
    10891105                    } 
     
    11101126                    media = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_media); 
    11111127                    parse_media(&scanner, media, &ctx); 
    1112                     session->media[ session->media_count++ ] = media; 
     1128                    if (session->media_count < PJMEDIA_MAX_SDP_MEDIA) 
     1129                        session->media[ session->media_count++ ] = media; 
     1130                    else 
     1131                        PJ_PERROR(2,(THIS_FILE, PJ_ETOOMANY, 
     1132                                     "Error adding media, media is ignored")); 
    11131133                    break; 
    11141134                case 'v': 
     
    13531373    static const pj_str_t ID_INACTIVE = { "inactive", 8 }; 
    13541374 
     1375    if (m->attr_count >= PJMEDIA_MAX_SDP_ATTR) 
     1376        return PJ_ETOOMANY; 
     1377 
    13551378    attr = pjmedia_sdp_attr_create(pool, ID_INACTIVE.ptr, NULL); 
    13561379    if (NULL == attr) 
    13571380        return PJ_ENOMEM; 
    13581381 
    1359     m->attr[m->attr_count++] = attr; 
     1382    pjmedia_sdp_media_add_attr(m, attr); 
    13601383    m->desc.port = 0; 
    13611384 
Note: See TracChangeset for help on using the changeset viewer.