mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +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->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);
|
||||
|
Reference in New Issue
Block a user