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.
This commit is contained in:
20
bin/tests/system/dnstap/README
Normal file
20
bin/tests/system/dnstap/README
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
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".
|
||||||
BIN
bin/tests/system/dnstap/large-answer.fstrm
Normal file
BIN
bin/tests/system/dnstap/large-answer.fstrm
Normal file
Binary file not shown.
@@ -736,5 +736,14 @@ EOF
|
|||||||
status=`expr $status + $ret`
|
status=`expr $status + $ret`
|
||||||
fi
|
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"
|
echo_i "exit status: $status"
|
||||||
[ $status -eq 0 ] || exit 1
|
[ $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);
|
result = dns_message_totext(dt->msg, style, 0, b);
|
||||||
if (result == ISC_R_NOSPACE) {
|
if (result == ISC_R_NOSPACE) {
|
||||||
|
isc_buffer_clear(b);
|
||||||
textlen *= 2;
|
textlen *= 2;
|
||||||
continue;
|
continue;
|
||||||
} else if (result == ISC_R_SUCCESS) {
|
} 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-ksk.key X 2018,2019
|
||||||
./bin/tests/system/dnssec/signer/general/bogus-zsk.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/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/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/setup.sh SH 2018,2019
|
||||||
./bin/tests/system/dnstap/tests.sh SH 2015,2016,2017,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
|
./bin/tests/system/dnstap/ydump.py PYTHON 2016,2017,2018,2019
|
||||||
|
|||||||
Reference in New Issue
Block a user