Repository navigation
mod_setenvif: look up the header again after a SetEnvIfExpr rule - #860
Open
arshsmith1 wants to merge 1 commit into
Open
arshsmith1 wants to merge 1 commit into
arshsmith1 wants to merge 1 commit into
Conversation
match_headers() reuses val and val_len for consecutive rules on the same header, but a SetEnvIfExpr rule in between can point val at the string its regex was applied to. The next rule for the earlier header was then matched against that other value, with the earlier header's length. Reset last_name for expression rules so the value is looked up again. * modules/metadata/mod_setenvif.c (match_headers): Reset last_name for expression rules. * test/modules/metadata/test_005_setenvif.py: New test.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
match_headers() reuses
val/val_lenfor consecutive SetEnvIf rules on the same header and only looks the value up again whenb->name != last_name. A SetEnvIfExpr rule in between leaveslast_namealone, butap_expr_exec_re()is passed&valand, when the expression's regex has a capture group and matches, pointsvalat the string that regex was applied to. The next rule for the earlier header then matches that other value, still using the earlier header'sval_len, so a literal (apr_strmatch) pattern can also read past the end of a shorter string. Witha request with
X-A: foo-xxxandX-B: barsets SEI_LITERAL and SEI_REGEX although X-A does not contain "bar". Expression rules now resetlast_name, so the next header rule looks its value up again. The new test_005_setenvif.py fails without the change. The rest of test/modules/metadata and test/pytest_suite's test_setenvif.py pass; the two libmagic ELF cases fail on macOS with and without it.(see
SECURITY.mdandhttps://www.apache.org/security/#reporting-a-vulnerability).
APLOGNO()tag;numbers are assigned by a committer at merge time (see
docs/log-message-tags/README).changes-entries/*.txtfile is included,following the template in
README.CHANGES(not needed otherwise).test/modules/xxxdirectory matching themodules/xxxmodule source,or
test/modules/corefor core server changes. On Unix, verify thesepass locally with e.g.
make check-pytest PYTEST_DIRS=test/modules/xxx.