| Index: compiled/filter/ElemHideBase.cpp | 
| =================================================================== | 
| --- a/compiled/filter/ElemHideBase.cpp | 
| +++ b/compiled/filter/ElemHideBase.cpp | 
| @@ -137,25 +137,27 @@ | 
| return converted; | 
| } | 
| return OwnedString(text); | 
| } | 
| } | 
| -ElemHideBase::ElemHideBase(Type type, const String& text, const ElemHideData& data) | 
| +ElemHideBase::ElemHideBase(Type type, const String& text, | 
| + const ElemHideData& data, const ParsedDomains& parsedDomains) | 
| : ActiveFilter(type, ConvertFilter(text, data.mSelectorStart), false), | 
| mData(data) | 
| { | 
| if (mData.HasDomains()) | 
| - ParseDomains(mData.GetDomainsSource(mText), u','); | 
| + FillDomains(mData.GetDomainsSource(mText), parsedDomains); | 
| } | 
| -Filter::Type ElemHideBase::Parse(DependentString& text, ElemHideData& data) | 
| +Filter::Type ElemHideBase::Parse(DependentString& text, DependentString& error, | 
| + ElemHideData& data, ParsedDomains& parsedDomains) | 
| { | 
| StringScanner scanner(text); | 
| // Domains part | 
| bool seenSpaces = false; | 
| while (!scanner.done()) | 
| { | 
| String::value_type next = scanner.next(); | 
| @@ -201,16 +203,24 @@ | 
| data.mSelectorStart = scanner.position() + 1; | 
| // We are done validating, now we can normalize whitespace and the domain part | 
| if (seenSpaces) | 
| NormalizeWhitespace(text, data.mDomainsEnd, data.mSelectorStart); | 
| DependentString(text, 0, data.mDomainsEnd).toLower(); | 
| + parsedDomains = | 
| + ParseDomainsInternal(data.GetDomainsSource(text), u',', false); | 
| + if (parsedDomains.hasEmpty) | 
| + { | 
| + error = u"filter_invalid_domain"_str; | 
| + return Type::INVALID; | 
| + } | 
| + | 
| if (exception) | 
| return Type::ELEMHIDEEXCEPTION; | 
| if (emulation) | 
| return Type::ELEMHIDEEMULATION; | 
| return Type::ELEMHIDE; | 
| } |