| 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; |
| } |