Fix: handler middleware is overwritten when combined with group or global middleware #588
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.
Summary
When handler-scoped middlewares are combined with global- or group-scoped middlewares, the concatenation is now done using a newly allocated slice instead of
append()
to the existing slice.Motivation
Here's how handler-scoped middleware was initialised before:
If
b.group.middleware
has extra capacity to fit the elements fromm
, theappend
will place the elements ofm
right next to the elements ofb.group.middleware
without allocating new memory. The expanded slice will be captured by the handler.However, if we add another handler with a middleware, the
append
will use the same extra capacity again, overwriting the handler-scoped middleware added before.The same issue applies when group-scoped middleware is combined with the global one.
Example:
Tests