Commit 0eec632d 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 3b942aff
......@@ -1709,6 +1709,16 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source,
msg->header_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);
memmove(msg->saved.base, isc_buffer_base(&origsource),
msg->saved.length);
msg->free_saved = 1;
}
isc_buffer_remainingregion(source, &r);
if (r.length < DNS_MESSAGE_HEADERLEN) {
return (ISC_R_UNEXPECTEDEND);
......@@ -1793,15 +1803,6 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source,
}
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);
memmove(msg->saved.base, isc_buffer_base(&origsource),
msg->saved.length);
msg->free_saved = 1;
}
if (ret == ISC_R_UNEXPECTEDEND && ignore_tc) {
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