ACLExtUser-based ACLs (i.e. ext_user and ext_user_regex) dereferenced a
nil request pointer when they were used in a context without a request
(e.g., when honoring on_unsupported_protocol).
SourceDomainCheck-based ACLs (i.e. srcdomain and srcdom_regex) have a
similar bug, although we do not know whether broken slow ACL code is
reachable without a request (e.g., on_unsupported_protocol tests cannot
reach that code until that directive starts supporting slow ACLs). This
change does not start to require request presence for these two ACLs to
avoid breaking any existing configurations that "work" without one.
char const *typeString() const override;
void parse() override;
int match(ACLChecklist *checklist) override;
+ bool requiresRequest() const override { return true; }
SBufList dump() const override;
bool empty () const override;
{
ACLFilledChecklist *checklist = Filled((ACLChecklist*)data);
checklist->markSourceDomainChecked();
- checklist->request->recordLookup(details);
+ if (checklist->request)
+ checklist->request->recordLookup(details);
+ else
+ debugs(28, 3, "no request to recordLookup()");
+
checklist->resumeNonBlockingCheck();
}