From 86dd22527030d10067a084ca82df636672986cd3 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 25 Sep 2013 16:04:41 +0200 Subject: [PATCH] Read 48 bits of tsigtime, not 32 --- host2str.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/host2str.c b/host2str.c index 0a3c73b3..798a049f 100644 --- a/host2str.c +++ b/host2str.c @@ -928,17 +928,20 @@ ldns_rdf2buffer_str_tsigtime(ldns_buffer *output,const ldns_rdf *rdf) /* tsigtime is 48 bits network order unsigned integer */ uint64_t tsigtime = 0; uint8_t *data = ldns_rdf_data(rdf); + uint64_t d0, d1, d2, d3, d4, d5; - if (ldns_rdf_size(rdf) != 6) { + if (ldns_rdf_size(rdf) < 6) { return LDNS_STATUS_WIRE_RDATA_ERR; } + d0 = data[0]; /* cast to uint64 for shift operations */ + d1 = data[1]; + d2 = data[2]; + d3 = data[3]; + d4 = data[4]; + d5 = data[5]; + tsigtime = (d0<<40) | (d1<<32) | (d2<<24) | (d3<<16) | (d4<<8) | d5; - tsigtime = ldns_read_uint16(data); - tsigtime *= 65536; - tsigtime += ldns_read_uint16(data+2); - tsigtime *= 65536; - - ldns_buffer_printf(output, "%llu ", tsigtime); + ldns_buffer_printf(output, "%llu ", (long long)tsigtime); return ldns_buffer_status(output); } -- 2.47.3