From: Mukund Sivaraman Date: Sun, 29 Jul 2012 21:03:18 +0000 (+0530) Subject: [2124] Don't catch InvalidBufferPosition when parsing wiredata X-Git-Tag: trac2351_base~159 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c8689536e71f5258ecf01b7fdc5c00644e1feeb;p=thirdparty%2Fkea.git [2124] Don't catch InvalidBufferPosition when parsing wiredata --- diff --git a/src/lib/dns/rdata/generic/sshfp_44.cc b/src/lib/dns/rdata/generic/sshfp_44.cc index 05c9edec2c..189f9e6c51 100644 --- a/src/lib/dns/rdata/generic/sshfp_44.cc +++ b/src/lib/dns/rdata/generic/sshfp_44.cc @@ -40,18 +40,13 @@ SSHFP::SSHFP(InputBuffer& buffer, size_t rdata_len) { isc_throw(InvalidRdataLength, "SSHFP record too short"); } - try { - algorithm_ = buffer.readUint8(); - fingerprint_type_ = buffer.readUint8(); + algorithm_ = buffer.readUint8(); + fingerprint_type_ = buffer.readUint8(); - rdata_len -= 2; - if (rdata_len > 0) { - fingerprint_.resize(rdata_len); - buffer.readData(&fingerprint_[0], rdata_len); - } - } catch (const isc::util::InvalidBufferPosition& e) { - isc_throw(InvalidRdataLength, - "SSHFP record shorter than RDATA len: " << e.what()); + rdata_len -= 2; + if (rdata_len > 0) { + fingerprint_.resize(rdata_len); + buffer.readData(&fingerprint_[0], rdata_len); } } diff --git a/src/lib/dns/tests/rdata_sshfp_unittest.cc b/src/lib/dns/tests/rdata_sshfp_unittest.cc index cfb0d58633..dccd8b1290 100644 --- a/src/lib/dns/tests/rdata_sshfp_unittest.cc +++ b/src/lib/dns/tests/rdata_sshfp_unittest.cc @@ -141,17 +141,17 @@ TEST_F(Rdata_SSHFP_Test, createFromWire) { // fingerprint is shorter than rdata len EXPECT_THROW(rdataFactoryFromFile(RRType("SSHFP"), RRClass("IN"), "rdata_sshfp_fromWire9"), - InvalidRdataLength); + InvalidBufferPosition); // fingerprint is missing EXPECT_THROW(rdataFactoryFromFile(RRType("SSHFP"), RRClass("IN"), "rdata_sshfp_fromWire10"), - InvalidRdataLength); + InvalidBufferPosition); // all rdata is missing EXPECT_THROW(rdataFactoryFromFile(RRType("SSHFP"), RRClass("IN"), "rdata_sshfp_fromWire11"), - InvalidRdataLength); + InvalidBufferPosition); } TEST_F(Rdata_SSHFP_Test, toText) {