diff --git a/src/rfc1035.c b/src/rfc1035.c index 5b2d661..9b84101 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -699,15 +699,17 @@ static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header * unsigned char *p2 = p1; /* make counted string zero-term and sanitise */ for (i = 0; i < len; i++) - if (isprint(*(p2+1))) - { - *p2 = *(p2+1); - p2++; - } + { + if (!isprint((int)*(p2+1))) + break; + + *p2 = *(p2+1); + p2++; + } *p2 = 0; my_syslog(LOG_INFO, "reply %s is %s", name, p1); /* restore */ - memmove(p1 + 1, p1, len); + memmove(p1 + 1, p1, i); *p1 = len; p1 += len+1; } diff --git a/src/tftp.c b/src/tftp.c index 3b7a239..e85bb63 100644 --- a/src/tftp.c +++ b/src/tftp.c @@ -582,9 +582,14 @@ void check_tftp_listeners(fd_set *rset, time_t now) my_syslog(MS_TFTP | LOG_INFO, endcon ? _("failed sending %s to %s") : _("sent %s to %s"), daemon->namebuff, daemon->addrbuff); /* unlink */ *up = tmp; - /* put on queue to be sent to script and deleted */ - transfer->next = daemon->tftp_done_trans; - daemon->tftp_done_trans = transfer; + if (endcon) + free_transfer(transfer); + else + { + /* put on queue to be sent to script and deleted */ + transfer->next = daemon->tftp_done_trans; + daemon->tftp_done_trans = transfer; + } continue; } }