diff --git a/src/seeder/dns.cpp b/src/seeder/dns.cpp --- a/src/seeder/dns.cpp +++ b/src/seeder/dns.cpp @@ -78,6 +78,9 @@ } // add dot in output if (!init) { + if (bufused > 253) { + return -1; + } if (bufused == bufsize - 1) { return -2; } @@ -103,7 +106,7 @@ } // copy label while (octet) { - if (*inpos == inend) { + if (*inpos == inend || bufused > 254) { return -1; } if (bufused == bufsize - 1) { diff --git a/src/seeder/test/seeder_tests.cpp b/src/seeder/test/seeder_tests.cpp --- a/src/seeder/test/seeder_tests.cpp +++ b/src/seeder/test/seeder_tests.cpp @@ -119,6 +119,9 @@ // Check that an oversized label causes an error CheckParseNameError("www." + maxLengthLabel + "a.com", -1); + + // Check that a query name that is too long causes an error + CheckParseNameError(maxLengthQName + ".com", -1, 2 * maxLengthQName.size()); } BOOST_AUTO_TEST_SUITE_END()