Ignore:
Timestamp:
Dec 11, 2015 4:59:56 AM (5 years ago)
Author:
ming
Message:

Fixed #1901: crash when async_cnt is set to a value greater than one for SIP TLS transport

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/ssl_sock_ossl.c

    r5087 r5214  
    142142    pj_ssl_sock_t        *parent; 
    143143    pj_ssl_sock_param     param; 
     144    pj_ssl_sock_param     newsock_param; 
    144145    pj_ssl_cert_t        *cert; 
    145146     
     
    17581759    pj_status_t status; 
    17591760 
    1760     PJ_UNUSED_ARG(src_addr_len); 
    1761  
    17621761    /* Create new SSL socket instance */ 
    1763     status = pj_ssl_sock_create(ssock_parent->pool, &ssock_parent->param, 
    1764                                 &ssock); 
     1762    status = pj_ssl_sock_create(ssock_parent->pool, 
     1763                                &ssock_parent->newsock_param, &ssock); 
    17651764    if (status != PJ_SUCCESS) 
    17661765        goto on_return; 
     
    21842183 
    21852184    /* Init secure socket param */ 
    2186     ssock->param = *param; 
     2185    pj_ssl_sock_param_copy(pool, &ssock->param, param); 
    21872186    ssock->param.read_buffer_size = ((ssock->param.read_buffer_size+7)>>3)<<3; 
    2188     if (param->ciphers_num > 0) { 
    2189         unsigned i; 
    2190         ssock->param.ciphers = (pj_ssl_cipher*) 
    2191                                pj_pool_calloc(pool, param->ciphers_num,  
    2192                                               sizeof(pj_ssl_cipher)); 
    2193         for (i = 0; i < param->ciphers_num; ++i) 
    2194             ssock->param.ciphers[i] = param->ciphers[i]; 
    2195     } 
    2196  
    2197     /* Server name must be null-terminated */ 
    2198     pj_strdup_with_null(pool, &ssock->param.server_name,  
    2199                         &param->server_name); 
    22002187 
    22012188    /* Finally */ 
     
    26182605                                              int addr_len) 
    26192606{ 
     2607    return pj_ssl_sock_start_accept2(ssock, pool, localaddr, addr_len, 
     2608                                     &ssock->param); 
     2609} 
     2610 
     2611 
     2612/** 
     2613 * Same as #pj_ssl_sock_start_accept(), but application provides parameter 
     2614 * for new accepted secure sockets. 
     2615 */ 
     2616PJ_DEF(pj_status_t) 
     2617pj_ssl_sock_start_accept2(pj_ssl_sock_t *ssock, 
     2618                          pj_pool_t *pool, 
     2619                          const pj_sockaddr_t *localaddr, 
     2620                          int addr_len, 
     2621                          const pj_ssl_sock_param *newsock_param) 
     2622{ 
    26202623    pj_activesock_cb asock_cb; 
    26212624    pj_activesock_cfg asock_cfg; 
     
    26232626 
    26242627    PJ_ASSERT_RETURN(ssock && pool && localaddr && addr_len, PJ_EINVAL); 
     2628 
     2629    /* Verify new socket parameters */ 
     2630    if (newsock_param->grp_lock != ssock->param.grp_lock || 
     2631        newsock_param->sock_af != ssock->param.sock_af || 
     2632        newsock_param->sock_type != ssock->param.sock_type) 
     2633    { 
     2634        return PJ_EINVAL; 
     2635    } 
    26252636 
    26262637    /* Create socket */ 
     
    26922703 
    26932704    /* Start accepting */ 
     2705    pj_ssl_sock_param_copy(pool, &ssock->newsock_param, newsock_param); 
    26942706    status = pj_activesock_start_accept(ssock->asock, pool); 
    26952707    if (status != PJ_SUCCESS) 
Note: See TracChangeset for help on using the changeset viewer.