Commit 6ed167ad authored by Mark Andrews's avatar Mark Andrews Committed by Michał Kępień
Browse files

Always keep a copy of the message

this allows it to be available even when dns_message_parse()
returns a error.
parent 348ba25d
...@@ -1712,6 +1712,19 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source, ...@@ -1712,6 +1712,19 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source,
msg->header_ok = 0; msg->header_ok = 0;
msg->question_ok = 0; msg->question_ok = 0;
if ((options & DNS_MESSAGEPARSE_CLONEBUFFER) == 0) {
isc_buffer_usedregion(&origsource, &msg->saved);
} else {
msg->saved.length = isc_buffer_usedlength(&origsource);
msg->saved.base = isc_mem_get(msg->mctx, msg->saved.length);
if (msg->saved.base == NULL) {
return (ISC_R_NOMEMORY);
}
memmove(msg->saved.base, isc_buffer_base(&origsource),
msg->saved.length);
msg->free_saved = 1;
}
isc_buffer_remainingregion(source, &r); isc_buffer_remainingregion(source, &r);
if (r.length < DNS_MESSAGE_HEADERLEN) if (r.length < DNS_MESSAGE_HEADERLEN)
return (ISC_R_UNEXPECTEDEND); return (ISC_R_UNEXPECTEDEND);
...@@ -1787,17 +1800,6 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source, ...@@ -1787,17 +1800,6 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source,
} }
truncated: truncated:
if ((options & DNS_MESSAGEPARSE_CLONEBUFFER) == 0)
isc_buffer_usedregion(&origsource, &msg->saved);
else {
msg->saved.length = isc_buffer_usedlength(&origsource);
msg->saved.base = isc_mem_get(msg->mctx, msg->saved.length);
if (msg->saved.base == NULL)
return (ISC_R_NOMEMORY);
memmove(msg->saved.base, isc_buffer_base(&origsource),
msg->saved.length);
msg->free_saved = 1;
}
if (ret == ISC_R_UNEXPECTEDEND && ignore_tc) if (ret == ISC_R_UNEXPECTEDEND && ignore_tc)
return (DNS_R_RECOVERABLE); return (DNS_R_RECOVERABLE);
......
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