| Index: compiled/filter/Filter.cpp |
| =================================================================== |
| --- a/compiled/filter/Filter.cpp |
| +++ b/compiled/filter/Filter.cpp |
| @@ -133,29 +133,40 @@ |
| break; |
| case WhitelistFilter::classType: |
| filter = FilterPtr(new WhitelistFilter(text, data.regexp), false); |
| break; |
| case ElemHideFilter::classType: |
| filter = FilterPtr(new ElemHideFilter(text, data.elemhide), false); |
| break; |
| case ElemHideException::classType: |
| - filter = FilterPtr(new ElemHideException(text, data.elemhide), false); |
| + filter = FilterPtr( |
| + new ElemHideException( |
| + data.elemhide.mNeedConversion ? |
| + DependentString(ElemHideBase::ConvertFilter(text, data.elemhide.mSelectorStart)) : |
| + text, data.elemhide), false); |
| break; |
| case ElemHideEmulationFilter::classType: |
| - filter = FilterPtr(new ElemHideEmulationFilter(text, data.elemhide), false); |
| + filter = FilterPtr( |
| + new ElemHideEmulationFilter( |
| + data.elemhide.mNeedConversion ? |
| + DependentString(ElemHideBase::ConvertFilter(text, data.elemhide.mSelectorStart)) : |
| + text, data.elemhide), false); |
| if (static_cast<ElemHideEmulationFilter*>(filter.get())->IsGeneric()) |
| filter = FilterPtr(new InvalidFilter(text, u"filter_elemhideemulation_nodomain"_str), false); |
| break; |
| default: |
| // This should never happen but just in case |
| return nullptr; |
| } |
| - // This is a hack: we looked up the entry using text but create it using |
| - // filter->mText. This works because both are equal at this point. However, |
| - // text refers to a temporary buffer which will go away. |
| enter_context("Adding to known filters"); |
| - knownFilter.assign(filter->mText, filter.get()); |
| + if (text != filter->mText) |
| + knownFilters[filter->mText] = filter.get(); |
| + else |
| + // This is a hack: we looked up the entry using text but create it using |
| + // filter->mText. This works because both are equal at this point. However, |
| + // text refers to a temporary buffer which will go away. |
| + knownFilter.assign(filter->mText, filter.get()); |
| exit_context(); |
| return filter.release(); |
| } |