Exclude EDE before other EDNS options when there isn't enough space #911
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change drops any EDE options from a response packet when there is not enough space for them but there is still enough space for the rest of the OPT record. This matches with the behavior specified in RFC 8914, which says "When the response grows beyond the requestor's UDP payload size, servers SHOULD truncate messages by dropping EDE options before dropping other data from packets".
In the function reply_info_answer_encode, I made the following changes:
In order to do this, I added a function calc_edns_option_size that calculates the size of an edns option. This function is similar to the existing function calc_edns_field_size, except it only finds the size for one option code.
The function error_encode was also changed so that if there is not enough space for all of the edns data, then any ede options are removed. Then, if there is enough space for the rest of the edns data, it is added, otherwise it is left out.