BIND 10 trac2387, updated. 785ade580637cc0d78139edbda05ed13e1675dea [2387] Fix leaks
BIND 10 source code commits
bind10-changes at lists.isc.org
Wed Apr 3 14:51:48 UTC 2013
The branch, trac2387 has been updated
via 785ade580637cc0d78139edbda05ed13e1675dea (commit)
from 85655172ba34a2d3c44731880f0e439d8933d277 (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 785ade580637cc0d78139edbda05ed13e1675dea
Author: Mukund Sivaraman <muks at isc.org>
Date: Wed Apr 3 20:12:21 2013 +0530
[2387] Fix leaks
-----------------------------------------------------------------------
Summary of changes:
src/lib/dns/rdata/generic/dnskey_48.cc | 16 +++++++++++-----
src/lib/dns/rdata/generic/dnskey_48.h | 2 +-
src/lib/dns/rdata/generic/nsec3_50.cc | 18 ++++++++++++------
src/lib/dns/rdata/generic/nsec3_50.h | 2 +-
src/lib/dns/rdata/generic/nsec3param_51.cc | 18 ++++++++++++------
src/lib/dns/rdata/generic/nsec3param_51.h | 2 +-
6 files changed, 38 insertions(+), 20 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/dns/rdata/generic/dnskey_48.cc b/src/lib/dns/rdata/generic/dnskey_48.cc
index 26714fb..ec0d820 100644
--- a/src/lib/dns/rdata/generic/dnskey_48.cc
+++ b/src/lib/dns/rdata/generic/dnskey_48.cc
@@ -70,12 +70,14 @@ struct DNSKEYImpl {
DNSKEY::DNSKEY(const std::string& dnskey_str) :
impl_(NULL)
{
+ std::auto_ptr<DNSKEYImpl> impl_ptr(NULL);
+
try {
std::istringstream ss(dnskey_str);
MasterLexer lexer;
lexer.pushSource(ss);
- constructFromLexer(lexer);
+ impl_ptr.reset(constructFromLexer(lexer));
if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
isc_throw(InvalidRdataText,
@@ -86,9 +88,13 @@ DNSKEY::DNSKEY(const std::string& dnskey_str) :
"Failed to construct DNSKEY from '" << dnskey_str << "': "
<< ex.what());
}
+
+ impl_ = impl_ptr.release();
}
-DNSKEY::DNSKEY(InputBuffer& buffer, size_t rdata_len) {
+DNSKEY::DNSKEY(InputBuffer& buffer, size_t rdata_len) :
+ impl_(NULL)
+{
if (rdata_len < 4) {
isc_throw(InvalidRdataLength, "DNSKEY too short: " << rdata_len);
}
@@ -131,10 +137,10 @@ DNSKEY::DNSKEY(MasterLexer& lexer, const Name*,
MasterLoader::Options, MasterLoaderCallbacks&) :
impl_(NULL)
{
- constructFromLexer(lexer);
+ impl_ = constructFromLexer(lexer);
}
-void
+DNSKEYImpl*
DNSKEY::constructFromLexer(MasterLexer& lexer) {
const uint32_t flags = lexer.getNextToken(MasterToken::NUMBER).getNumber();
if (flags > 0xffff) {
@@ -183,7 +189,7 @@ DNSKEY::constructFromLexer(MasterLexer& lexer) {
decodeBase64(keydata_str, keydata);
}
- impl_ = new DNSKEYImpl(flags, protocol, algorithm, keydata);
+ return (new DNSKEYImpl(flags, protocol, algorithm, keydata));
}
DNSKEY::DNSKEY(const DNSKEY& source) :
diff --git a/src/lib/dns/rdata/generic/dnskey_48.h b/src/lib/dns/rdata/generic/dnskey_48.h
index b8604e5..3ef18e6 100644
--- a/src/lib/dns/rdata/generic/dnskey_48.h
+++ b/src/lib/dns/rdata/generic/dnskey_48.h
@@ -54,7 +54,7 @@ public:
uint8_t getAlgorithm() const;
private:
- void constructFromLexer(isc::dns::MasterLexer& lexer);
+ DNSKEYImpl* constructFromLexer(isc::dns::MasterLexer& lexer);
DNSKEYImpl* impl_;
};
diff --git a/src/lib/dns/rdata/generic/nsec3_50.cc b/src/lib/dns/rdata/generic/nsec3_50.cc
index 51d72d8..1d60dbd 100644
--- a/src/lib/dns/rdata/generic/nsec3_50.cc
+++ b/src/lib/dns/rdata/generic/nsec3_50.cc
@@ -85,12 +85,14 @@ struct NSEC3Impl {
NSEC3::NSEC3(const std::string& nsec3_str) :
impl_(NULL)
{
+ std::auto_ptr<NSEC3Impl> impl_ptr(NULL);
+
try {
std::istringstream ss(nsec3_str);
MasterLexer lexer;
lexer.pushSource(ss);
- constructFromLexer(lexer);
+ impl_ptr.reset(constructFromLexer(lexer));
if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
isc_throw(InvalidRdataText,
@@ -101,6 +103,8 @@ NSEC3::NSEC3(const std::string& nsec3_str) :
"Failed to construct NSEC3 from '" << nsec3_str << "': "
<< ex.what());
}
+
+ impl_ = impl_ptr.release();
}
/// \brief Constructor with a context of MasterLexer.
@@ -122,10 +126,10 @@ NSEC3::NSEC3(MasterLexer& lexer, const Name*, MasterLoader::Options,
MasterLoaderCallbacks&) :
impl_(NULL)
{
- constructFromLexer(lexer);
+ impl_ = constructFromLexer(lexer);
}
-void
+NSEC3Impl*
NSEC3::constructFromLexer(MasterLexer& lexer) {
vector<uint8_t> salt;
const ParseNSEC3ParamResult params =
@@ -147,11 +151,13 @@ NSEC3::constructFromLexer(MasterLexer& lexer) {
vector<uint8_t> typebits;
// For NSEC3 empty bitmap is possible and allowed.
buildBitmapsFromLexer("NSEC3", lexer, typebits, true);
- impl_ = new NSEC3Impl(params.algorithm, params.flags, params.iterations,
- salt, next, typebits);
+ return (new NSEC3Impl(params.algorithm, params.flags, params.iterations,
+ salt, next, typebits));
}
-NSEC3::NSEC3(InputBuffer& buffer, size_t rdata_len) {
+NSEC3::NSEC3(InputBuffer& buffer, size_t rdata_len) :
+ impl_(NULL)
+{
vector<uint8_t> salt;
const ParseNSEC3ParamResult params =
parseNSEC3ParamWire("NSEC3", buffer, rdata_len, salt);
diff --git a/src/lib/dns/rdata/generic/nsec3_50.h b/src/lib/dns/rdata/generic/nsec3_50.h
index 0990bd5..6a1dcb5 100644
--- a/src/lib/dns/rdata/generic/nsec3_50.h
+++ b/src/lib/dns/rdata/generic/nsec3_50.h
@@ -48,7 +48,7 @@ public:
const std::vector<uint8_t>& getNext() const;
private:
- void constructFromLexer(isc::dns::MasterLexer& lexer);
+ NSEC3Impl* constructFromLexer(isc::dns::MasterLexer& lexer);
NSEC3Impl* impl_;
};
diff --git a/src/lib/dns/rdata/generic/nsec3param_51.cc b/src/lib/dns/rdata/generic/nsec3param_51.cc
index a4cfe09..2ad46ae 100644
--- a/src/lib/dns/rdata/generic/nsec3param_51.cc
+++ b/src/lib/dns/rdata/generic/nsec3param_51.cc
@@ -64,12 +64,14 @@ struct NSEC3PARAMImpl {
NSEC3PARAM::NSEC3PARAM(const std::string& nsec3param_str) :
impl_(NULL)
{
+ std::auto_ptr<NSEC3PARAMImpl> impl_ptr(NULL);
+
try {
std::istringstream ss(nsec3param_str);
MasterLexer lexer;
lexer.pushSource(ss);
- constructFromLexer(lexer);
+ impl_ptr.reset(constructFromLexer(lexer));
if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
isc_throw(InvalidRdataText,
@@ -80,6 +82,8 @@ NSEC3PARAM::NSEC3PARAM(const std::string& nsec3param_str) :
"Failed to construct NSEC3PARAM from '" << nsec3param_str
<< "': " << ex.what());
}
+
+ impl_ = impl_ptr.release();
}
/// \brief Constructor with a context of MasterLexer.
@@ -101,20 +105,22 @@ NSEC3PARAM::NSEC3PARAM(MasterLexer& lexer, const Name*, MasterLoader::Options,
MasterLoaderCallbacks&) :
impl_(NULL)
{
- constructFromLexer(lexer);
+ impl_ = constructFromLexer(lexer);
}
-void
+NSEC3PARAMImpl*
NSEC3PARAM::constructFromLexer(MasterLexer& lexer) {
vector<uint8_t> salt;
const ParseNSEC3ParamResult params =
parseNSEC3ParamFromLexer("NSEC3PARAM", lexer, salt);
- impl_ = new NSEC3PARAMImpl(params.algorithm, params.flags,
- params.iterations, salt);
+ return (new NSEC3PARAMImpl(params.algorithm, params.flags,
+ params.iterations, salt));
}
-NSEC3PARAM::NSEC3PARAM(InputBuffer& buffer, size_t rdata_len) {
+NSEC3PARAM::NSEC3PARAM(InputBuffer& buffer, size_t rdata_len) :
+ impl_(NULL)
+{
vector<uint8_t> salt;
const ParseNSEC3ParamResult params =
parseNSEC3ParamWire("NSEC3PARAM", buffer, rdata_len, salt);
diff --git a/src/lib/dns/rdata/generic/nsec3param_51.h b/src/lib/dns/rdata/generic/nsec3param_51.h
index f371d7b..bd2ce75 100644
--- a/src/lib/dns/rdata/generic/nsec3param_51.h
+++ b/src/lib/dns/rdata/generic/nsec3param_51.h
@@ -50,7 +50,7 @@ public:
const std::vector<uint8_t>& getSalt() const;
private:
- void constructFromLexer(isc::dns::MasterLexer& lexer);
+ NSEC3PARAMImpl* constructFromLexer(isc::dns::MasterLexer& lexer);
NSEC3PARAMImpl* impl_;
};
More information about the bind10-changes
mailing list