Ignore:
Timestamp:
Apr 29, 2007 6:30:58 AM (14 years ago)
Author:
bennylp
Message:

Fixed ticket #239: Error parsing/printing quoted parameters, and added header tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/pjproject-0.5-stable/pjsip/src/pjsip/sip_parser.c

    r1219 r1222  
    139139                                     pj_pool_t *pool, 
    140140                                     pj_str_t *pname,  
    141                                      pj_str_t *pvalue); 
     141                                     pj_str_t *pvalue, 
     142                                     unsigned option); 
    142143static void         int_parse_uri_param( pj_scanner *scanner,  
    143144                                         pj_pool_t *pool, 
     
    11181119/* Parse parameter (";" pname ["=" pvalue]) in header. */ 
    11191120static void int_parse_param( pj_scanner *scanner, pj_pool_t *pool, 
    1120                              pj_str_t *pname, pj_str_t *pvalue) 
     1121                             pj_str_t *pname, pj_str_t *pvalue, 
     1122                             unsigned option) 
    11211123{ 
    11221124    /* Get ';' character */ 
     
    11241126 
    11251127    /* Get pname and optionally pvalue */ 
    1126     pjsip_parse_param_imp(scanner, pool, pname, pvalue,  
    1127                           PJSIP_PARSE_REMOVE_QUOTE); 
     1128    pjsip_parse_param_imp(scanner, pool, pname, pvalue, option); 
    11281129} 
    11291130 
     
    15361537     *   Accept, Allow, Supported 
    15371538     */ 
    1538     if (*scanner->curptr == '\r' || *scanner->curptr == '\n') { 
     1539    if (pj_scan_is_eof(scanner) ||  
     1540        *scanner->curptr == '\r' || *scanner->curptr == '\n')  
     1541    { 
    15391542        goto end; 
    15401543    } 
     
    15481551                     &hdr->values[hdr->count]); 
    15491552        hdr->count++; 
     1553 
     1554        if (hdr->count >= PJSIP_GENERIC_ARRAY_MAX_COUNT) 
     1555            break; 
    15501556    } 
    15511557 
     
    16141620        pj_str_t pname, pvalue; 
    16151621 
    1616         int_parse_param( scanner, pool, &pname, &pvalue); 
     1622        int_parse_param( scanner, pool, &pname, &pvalue, 0); 
    16171623        if (!parser_stricmp(pname, pjsip_Q_STR) && pvalue.slen) { 
    16181624            char *dot_pos = pj_memchr(pvalue.ptr, '.', pvalue.slen); 
     
    17071713    while (*scanner->curptr == ';') { 
    17081714        pj_str_t pname, pvalue; 
    1709         int_parse_param(scanner, ctx->pool, &pname, &pvalue); 
     1715        int_parse_param(scanner, ctx->pool, &pname, &pvalue, 0); 
    17101716        concat_param(&hdr->media.param, ctx->pool, &pname, &pvalue); 
    17111717    } 
     
    17601766        pj_str_t pname, pvalue; 
    17611767 
    1762         int_parse_param( scanner, pool, &pname, &pvalue); 
     1768        int_parse_param( scanner, pool, &pname, &pvalue, 0); 
    17631769 
    17641770        if (!parser_stricmp(pname, pjsip_TAG_STR)) { 
     
    18441850        pj_str_t pname, pvalue; 
    18451851 
    1846         int_parse_param( scanner, pool, &pname, &pvalue); 
     1852        int_parse_param( scanner, pool, &pname, &pvalue, 0); 
    18471853 
    18481854        if (!parser_stricmp(pname, pjsip_BRANCH_STR) && pvalue.slen) { 
     
    19051911    while (*scanner->curptr == ';') { 
    19061912        pjsip_param *p = pj_pool_alloc(pool, sizeof(pjsip_param)); 
    1907         int_parse_param(scanner, pool, &p->name, &p->value); 
     1913        int_parse_param(scanner, pool, &p->name, &p->value, 0); 
    19081914        pj_list_insert_before(&hdr->other_param, p); 
    19091915    } 
Note: See TracChangeset for help on using the changeset viewer.