Commit cfcad4db authored by Michal 'vorner' Vaner's avatar Michal 'vorner' Vaner
Browse files

[2383] Append the origin if relative

Add the origin to the parsed name if the parsed name is relative. Also,
add the checks for the combined length and fix a test for them.
parent b2d9be92
......@@ -353,6 +353,37 @@ Name::Name(const char* namedata, size_t data_len, const Name* origin,
ndata_.assign(ndata.data(), ndata.size());
length_ = ndata_.size();
offsets_.assign(offsets.begin(), offsets.end());
if (!absolute) {
// Now, extend the data with the ones from origin. But eat the
// last label (the empty one).
// Drop the last character of the data (the \0) and append a copy of
// the origin's data
ndata_.erase(ndata_.end() - 1);
ndata_.append(origin->ndata_);
// Do a similar thing with offsets. However, we need to move them
// so they point after the prefix we parsed before.
size_t offset = offsets_.back();
offsets_.pop_back();
size_t offset_count = offsets_.size();
offsets_.insert(offsets_.end(), origin->offsets_.begin(),
origin->offsets_.end());
for (NameOffsets::iterator it(offsets_.begin() + offset_count);
it != offsets_.end(); ++it) {
*it += offset;
}
// Adjust sizes.
length_ = ndata_.size();
labelcount_ = offsets_.size();
// And check the sizes are OK.
if (labelcount_ > Name::MAX_LABELS || length_ > Name::MAX_WIRE) {
isc_throw(TooLongName, "Combined name is too long");
}
}
}
namespace {
......
......@@ -47,7 +47,7 @@ const char* max_labels_str = "0.1.2.3.4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9." // 40
"0.1.2.3.4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9." // 160
"0.1.2.3.4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9." // 200
"0.1.2.3.4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9." // 240
"0.1.2.3.4.5.6.";
"0.1.2.3.4.5.6";
// This is a name of maximum allowed length
const char* max_len_str = "123456789.123456789.123456789.123456789.123456789."
"123456789.123456789.123456789.123456789.123456789."
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment