Changeset 5669


Ignore:
Timestamp:
Oct 3, 2017 9:35:36 AM (7 years ago)
Author:
riza
Message:

Close #2049: Try to allocate larger buffer size when converting pjsip_hdr to
SipHeader?.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua2/siptypes.cpp

    r5207 r5669  
    364364void SipHeader::fromPj(const pjsip_hdr *hdr) throw(Error) 
    365365{ 
    366     char buf[256]; 
    367  
    368     int len = pjsip_hdr_print_on((void*)hdr, buf, sizeof(buf)-1); 
    369     if (len <= 0) 
     366    char *buf = NULL; 
     367    int len = 0; 
     368    unsigned buf_size = 256>>1; 
     369 
     370    /* Print header to a 256 bytes buffer first. 
     371     * If buffer is not sufficient, try 512, 1024, soon 
     372     * until > PJSIP_MAX_PKT_LEN 
     373     */ 
     374    do { 
     375        buf_size <<= 1; 
     376        buf = (char*)malloc(buf_size); 
     377        if (!buf) 
     378            PJSUA2_RAISE_ERROR(PJ_ENOMEM); 
     379 
     380        len = pjsip_hdr_print_on((void*)hdr, buf, buf_size-1); 
     381        if (len < 0) 
     382            free(buf); 
     383 
     384    } while ((buf_size < PJSIP_MAX_PKT_LEN) && (len < 0)); 
     385     
     386    if (len < 0) 
    370387        PJSUA2_RAISE_ERROR(PJ_ETOOSMALL); 
     388 
    371389    buf[len] = '\0'; 
    372390 
    373391    char *pos = strchr(buf, ':'); 
    374     if (!pos) 
     392    if (!pos) { 
     393        free(buf); 
    375394        PJSUA2_RAISE_ERROR(PJSIP_EINVALIDHDR); 
     395    } 
    376396 
    377397    // Trim white space after header name 
     
    385405    hName = string(buf, end_name); 
    386406    hValue = string(start_val); 
     407    free(buf); 
    387408} 
    388409 
Note: See TracChangeset for help on using the changeset viewer.