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