mirror of
https://github.com/matrix-construct/construct
synced 2024-06-02 18:18:56 +02:00
ircd::rfc1035: Add size constexprs.
This commit is contained in:
parent
74c7d1d5c1
commit
dc377ea695
|
@ -23,7 +23,14 @@ namespace ircd::rfc1035
|
|||
struct record;
|
||||
enum class op :uint8_t;
|
||||
|
||||
constexpr size_t NAME_BUF_SIZE {256};
|
||||
// Section 2.3.4 Size Limits
|
||||
constexpr size_t LABEL_MAX {63};
|
||||
constexpr size_t NAME_MAX {255};
|
||||
constexpr size_t TTL_MAX {std::numeric_limits<int32_t>::max()};
|
||||
|
||||
constexpr size_t LABEL_BUF_SIZE {LABEL_MAX + 1};
|
||||
constexpr size_t NAME_BUF_SIZE {NAME_MAX + 1};
|
||||
|
||||
extern const std::array<string_view, 25> rcode;
|
||||
extern const std::unordered_map<string_view, uint16_t> qtype;
|
||||
extern const std::map<uint16_t, string_view> rqtype;
|
||||
|
|
|
@ -356,10 +356,11 @@ ircd::rfc1035::make_name(const mutable_buffer &out,
|
|||
*pos = '\0';
|
||||
ircd::tokens(fqdn, '.', [&pos, &out](const string_view &label)
|
||||
{
|
||||
if(unlikely(size(label) >= 64))
|
||||
if(unlikely(size(label) > LABEL_MAX))
|
||||
throw error
|
||||
{
|
||||
"Single part of domain cannot exceed 63 characters"
|
||||
"Single part of domain cannot exceed %zu characters",
|
||||
LABEL_MAX
|
||||
};
|
||||
|
||||
*pos++ = size(label);
|
||||
|
@ -378,7 +379,14 @@ size_t
|
|||
ircd::rfc1035::parse_name(const mutable_buffer &out,
|
||||
const const_buffer &in)
|
||||
{
|
||||
assert(!empty(out));
|
||||
if(unlikely(size(out) < NAME_BUF_SIZE))
|
||||
throw error
|
||||
{
|
||||
"Name output buffer is %zu but RFC1035 requires %zu",
|
||||
size(out),
|
||||
NAME_BUF_SIZE
|
||||
};
|
||||
|
||||
if(unlikely(empty(in)))
|
||||
throw error
|
||||
{
|
||||
|
@ -408,9 +416,9 @@ ircd::rfc1035::parse_name(const mutable_buffer &out,
|
|||
if(ret > size(out) - 1)
|
||||
throw error
|
||||
{
|
||||
"Not enough space in name output buffer; have:%zu need:%zu",
|
||||
size(out),
|
||||
ret + 1
|
||||
"Name of length %zu larger than %zu and would be truncated",
|
||||
size_t(pos - data(in)),
|
||||
NAME_MAX
|
||||
};
|
||||
|
||||
assert(strnlen(data(out), size(out)) + 1 == ret);
|
||||
|
|
Loading…
Reference in a new issue