*** update.c-orig Thu Apr 26 15:41:12 2007 --- update.c Thu Apr 26 15:45:54 2007 *************** *** 228,233 **** --- 228,236 ---- DNS_GET16(rr->class, src); DNS_GET32(rr->ttl, src); DNS_GET16(rr->rdlength, src); + if (rr->rdlength > sizeof rr->rdata) + rr->rdlength = sizeof rr->rdata; + memcpy(rr->rdata, src, rr->rdlength); src += rr->rdlength; *************** *** 328,346 **** { int n, x; /* Offset in 'data' */ ! for (n = 0; src < end && n < datalen; ) { int len = *src++; if (n) data[n++] = ' '; ! for (x = 0; x < len && src < end && n < datalen; x++) data[n++] = *src++; if (one_word_only) ! { ! data[n] = '\0'; ! return (src); ! } } data[n] = '\0'; return (src); --- 331,346 ---- { int n, x; /* Offset in 'data' */ ! for (n = 0; src < end && n < datalen - 1; ) { int len = *src++; if (n) data[n++] = ' '; ! for (x = 0; x < len && src < end && n < datalen - 1; x++) data[n++] = *src++; if (one_word_only) ! break; } data[n] = '\0'; return (src);