Commit 3549abe8 authored by Michał Kępień's avatar Michał Kępień

dnstap-read: clear buffer before expanding it

When printing a packet, dnstap-read checks whether its text form takes
up more than the 2048 bytes allocated for the output buffer by default.
If that is the case, the output buffer is automatically expanded, but
the truncated output is left in the buffer, resulting in malformed data
being printed.  Clear the output buffer before expanding it to prevent
this issue from occurring.
parent 1dfdedf1
Copyright (C) Internet Systems Consortium, Inc. ("ISC")
See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
The "large-answer.fstrm" file was generated by configuring a named instance
compiled with --enable-dnstap and --enable-fixed-rrset with the following
directives:
minimal-responses yes;
rrset-order { order fixed; };
dnstap { auth response; };
dnstap-identity none;
dnstap-output file "large-answer.fstrm";
The captured RRset from the "example." zone was created using:
$GENERATE 1-48 @ IN A 127.0.0.$
A server instance set up this way was then queried non-recursively (RD=0) for
"example/A".
......@@ -736,5 +736,14 @@ EOF
status=`expr $status + $ret`
fi
echo_i "checking large packet printing"
ret=0
# Expect one occurrence of "opcode: QUERY" below "reponse_message_data" and
# another one below "response_message".
lines=`$DNSTAPREAD -y large-answer.fstrm | grep -c "opcode: QUERY"`
[ $lines -eq 2 ] || ret=1
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
echo_i "exit status: $status"
[ $status -eq 0 ] || exit 1
......@@ -155,6 +155,7 @@ print_packet(dns_dtdata_t *dt, const dns_master_style_t *style) {
result = dns_message_totext(dt->msg, style, 0, b);
if (result == ISC_R_NOSPACE) {
isc_buffer_clear(b);
textlen *= 2;
continue;
} else if (result == ISC_R_SUCCESS) {
......
......@@ -558,7 +558,9 @@
./bin/tests/system/dnssec/signer/general/bogus-ksk.key X 2018,2019
./bin/tests/system/dnssec/signer/general/bogus-zsk.key X 2018,2019
./bin/tests/system/dnssec/tests.sh SH 2000,2001,2002,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019
./bin/tests/system/dnstap/README TXT.BRIEF 2019
./bin/tests/system/dnstap/clean.sh SH 2015,2016,2017,2018,2019
./bin/tests/system/dnstap/large-answer.fstrm X 2019
./bin/tests/system/dnstap/setup.sh SH 2018,2019
./bin/tests/system/dnstap/tests.sh SH 2015,2016,2017,2018,2019
./bin/tests/system/dnstap/ydump.py PYTHON 2016,2017,2018,2019
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment