BIND 10 master, updated. 69dfb4544d9ded3c10cffbbfd573ae05fdeb771f [master] Merge branch 'trac2887'
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Apr 26 06:25:13 UTC 2013
The branch, master has been updated
via 69dfb4544d9ded3c10cffbbfd573ae05fdeb771f (commit)
via 3b1551b28913ae83e62997de0c8c4dbd28c25217 (commit)
via 23af78de3f2162aa27920e0ccc2784d76e0def8d (commit)
via 22eb335a0216d642194450947b28ad2ac3f771f0 (commit)
from c66811b7635660c28041c947cbd75e6dcc322168 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 69dfb4544d9ded3c10cffbbfd573ae05fdeb771f
Merge: c66811b 3b1551b
Author: JINMEI Tatuya <jinmei at isc.org>
Date: Thu Apr 25 23:22:52 2013 -0700
[master] Merge branch 'trac2887'
-----------------------------------------------------------------------
Summary of changes:
src/lib/datasrc/memory/rdataset.cc | 10 ++++------
src/lib/dns/python/rrset_python.cc | 10 +++++++++-
src/lib/dns/python/tests/rrset_python_test.py | 7 ++++++-
src/lib/dns/tsigrecord.cc | 7 ++++---
4 files changed, 23 insertions(+), 11 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory/rdataset.cc b/src/lib/datasrc/memory/rdataset.cc
index 3841c03..7f37f51 100644
--- a/src/lib/datasrc/memory/rdataset.cc
+++ b/src/lib/datasrc/memory/rdataset.cc
@@ -28,7 +28,6 @@
#include <stdint.h>
#include <algorithm>
#include <cstring>
-#include <typeinfo> // for bad_cast
#include <new> // for the placement new
using namespace isc::dns;
@@ -41,13 +40,12 @@ namespace memory {
namespace {
RRType
getCoveredType(const Rdata& rdata) {
- try {
- const generic::RRSIG& rrsig_rdata =
- dynamic_cast<const generic::RRSIG&>(rdata);
- return (rrsig_rdata.typeCovered());
- } catch (const std::bad_cast&) {
+ const generic::RRSIG* rrsig_rdata =
+ dynamic_cast<const generic::RRSIG*>(&rdata);
+ if (!rrsig_rdata) {
isc_throw(BadValue, "Non RRSIG is given where it's expected");
}
+ return (rrsig_rdata->typeCovered());
}
// A helper for lowestTTL: restore RRTTL object from wire-format 32-bit data.
diff --git a/src/lib/dns/python/rrset_python.cc b/src/lib/dns/python/rrset_python.cc
index 2992522..dc2af22 100644
--- a/src/lib/dns/python/rrset_python.cc
+++ b/src/lib/dns/python/rrset_python.cc
@@ -293,8 +293,16 @@ RRset_addRdata(PyObject* self, PyObject* args) {
PyErr_Clear();
PyErr_SetString(PyExc_TypeError,
"Rdata type to add must match type of RRset");
- return (NULL);
+ } catch (const exception& ex) {
+ const string ex_what =
+ "Unexpected failure adding rrset Rdata: " +
+ string(ex.what());
+ PyErr_SetString(po_IscException, ex_what.c_str());
+ } catch (...) {
+ PyErr_SetString(PyExc_SystemError,
+ "Unexpected failure adding rrset Rdata");
}
+ return (NULL);
}
PyObject*
diff --git a/src/lib/dns/python/tests/rrset_python_test.py b/src/lib/dns/python/tests/rrset_python_test.py
index 010b60c..0ffcdbe 100644
--- a/src/lib/dns/python/tests/rrset_python_test.py
+++ b/src/lib/dns/python/tests/rrset_python_test.py
@@ -78,7 +78,12 @@ class TestModuleSpec(unittest.TestCase):
def test_add_rdata(self):
# no iterator to read out yet (TODO: add addition test once implemented)
- self.assertRaises(TypeError, self.rrset_a.add_rdata,
+ # This should result in TypeError, but FreeBSD 9.1 cannot correctly
+ # catch the expected internal C++ exception, resulting in SystemError.
+ # In general it's not a good practice to weaken the test condition for
+ # a limited set of buggy environment, but this seems to be the only
+ # case it could fail this way, so we'd live with it. See #2887.
+ self.assertRaises((TypeError, SystemError), self.rrset_a.add_rdata,
Rdata(RRType("NS"), RRClass("IN"), "test.name."))
def test_to_text(self):
diff --git a/src/lib/dns/tsigrecord.cc b/src/lib/dns/tsigrecord.cc
index 9dd3f78..ba30c0a 100644
--- a/src/lib/dns/tsigrecord.cc
+++ b/src/lib/dns/tsigrecord.cc
@@ -59,13 +59,14 @@ namespace {
// of the constructor below.
const any::TSIG&
castToTSIGRdata(const rdata::Rdata& rdata) {
- try {
- return (dynamic_cast<const any::TSIG&>(rdata));
- } catch (std::bad_cast&) {
+ const any::TSIG* tsig_rdata =
+ dynamic_cast<const any::TSIG*>(&rdata);
+ if (!tsig_rdata) {
isc_throw(DNSMessageFORMERR,
"TSIG record is being constructed from "
"incompatible RDATA:" << rdata.toText());
}
+ return (*tsig_rdata);
}
}
More information about the bind10-changes
mailing list