Ignore:
Timestamp:
Mar 2, 2007 2:35:57 PM (17 years ago)
Author:
bennylp
Message:

Fixed ticket #156: Not enough memory to parse DNS packets in resolver (thanks Frank Wiersma)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib-util/src/pjlib-util/dns.c

    r974 r1031  
    341341    /* Parse some well known records */ 
    342342    if (rr->type == PJ_DNS_TYPE_A) { 
    343         pj_in_addr ip_addr; 
    344  
    345         pj_memcpy(&ip_addr, p, 4); 
    346         pj_strdup2(pool, &rr->rdata.a.ip_addr, pj_inet_ntoa(ip_addr)); 
    347  
     343        pj_memcpy(&rr->rdata.a.ip_addr, p, 4); 
    348344        p += 4; 
    349345 
     
    588584                         pool, &dst->rdata.srv.target); 
    589585    } else if (src->type == PJ_DNS_TYPE_A) { 
    590         pj_strdup(pool, &dst->rdata.a.ip_addr, &src->rdata.a.ip_addr); 
     586        dst->rdata.a.ip_addr.s_addr =  src->rdata.a.ip_addr.s_addr; 
    591587    } else if (src->type == PJ_DNS_TYPE_CNAME) { 
    592588        pj_strdup(pool, &dst->rdata.cname.name, &src->rdata.cname.name); 
     
    603599PJ_DEF(void) pj_dns_packet_dup(pj_pool_t *pool, 
    604600                               const pj_dns_parsed_packet*p, 
     601                               unsigned options, 
    605602                               pj_dns_parsed_packet **p_dst) 
    606603{ 
     
    631628 
    632629    /* Copy query section */ 
    633     if (p->hdr.qdcount) { 
     630    if (p->hdr.qdcount && (options & PJ_DNS_NO_QD)==0) { 
    634631        dst->q = pj_pool_alloc(pool, p->hdr.qdcount *  
    635632                                     sizeof(pj_dns_parsed_query)); 
     
    642639 
    643640    /* Copy answer section */ 
    644     if (p->hdr.anscount) { 
     641    if (p->hdr.anscount && (options & PJ_DNS_NO_ANS)==0) { 
    645642        dst->ans = pj_pool_alloc(pool, p->hdr.anscount *  
    646643                                       sizeof(pj_dns_parsed_rr)); 
     
    653650 
    654651    /* Copy NS section */ 
    655     if (p->hdr.nscount) { 
     652    if (p->hdr.nscount && (options & PJ_DNS_NO_NS)==0) { 
    656653        dst->ns = pj_pool_alloc(pool, p->hdr.nscount *  
    657654                                      sizeof(pj_dns_parsed_rr)); 
     
    664661 
    665662    /* Copy additional info section */ 
    666     if (p->hdr.arcount) { 
     663    if (p->hdr.arcount && (options & PJ_DNS_NO_AR)==0) { 
    667664        dst->arr = pj_pool_alloc(pool, p->hdr.arcount *  
    668665                                       sizeof(pj_dns_parsed_rr)); 
Note: See TracChangeset for help on using the changeset viewer.