diff options
author | Michael Brown | 2017-09-07 13:17:18 +0200 |
---|---|---|
committer | Michael Brown | 2017-09-07 13:19:35 +0200 |
commit | af02a8d07193e8b8900a37a8f42aefcdc332e68c (patch) | |
tree | 119e4c79c038f6eac71f44e3147cd095ff0855a3 /src/net | |
parent | [efi] Match behaviour of SnpDxe for truncated received packets (diff) | |
download | ipxe-af02a8d07193e8b8900a37a8f42aefcdc332e68c.tar.gz ipxe-af02a8d07193e8b8900a37a8f42aefcdc332e68c.tar.xz ipxe-af02a8d07193e8b8900a37a8f42aefcdc332e68c.zip |
[dns] Ensure DNS names are NUL-terminated when used as diagnostic strings
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/udp/dns.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/net/udp/dns.c b/src/net/udp/dns.c index 897e0f85..f412f710 100644 --- a/src/net/udp/dns.c +++ b/src/net/udp/dns.c @@ -417,7 +417,7 @@ static const char * dns_name ( struct dns_name *name ) { static char buf[256]; int len; - len = dns_decode ( name, buf, sizeof ( buf ) ); + len = dns_decode ( name, buf, ( sizeof ( buf ) - 1 /* NUL */ ) ); return ( ( len < 0 ) ? "<INVALID>" : buf ); } @@ -877,10 +877,16 @@ static void dns_xfer_close ( struct dns_request *dns, int rc ) { */ static int dns_progress ( struct dns_request *dns, struct job_progress *progress ) { + int len; /* Show current question as progress message */ - dns_decode ( &dns->name, progress->message, - sizeof ( progress->message ) ); + len = dns_decode ( &dns->name, progress->message, + ( sizeof ( progress->message ) - 1 /* NUL */ ) ); + if ( len < 0 ) { + /* Ignore undecodable names */ + progress->message[0] = '\0'; + } + return 0; } |