mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-03 08:05:21 +00:00
Always keep a copy of the message
this allows it to be available even when dns_message_parse() returns a error.
This commit is contained in:
committed by
Michał Kępień
parent
57fbc57b2e
commit
70a71de9c9
@@ -1709,6 +1709,16 @@ 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);
|
||||||
|
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);
|
||||||
@@ -1793,15 +1803,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);
|
|
||||||
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);
|
||||||
|
Reference in New Issue
Block a user