| Index: src/org/adblockplus/sbrowser/contentblocker/engine/Subscriptions.java |
| =================================================================== |
| --- a/src/org/adblockplus/sbrowser/contentblocker/engine/Subscriptions.java |
| +++ b/src/org/adblockplus/sbrowser/contentblocker/engine/Subscriptions.java |
| @@ -36,16 +36,19 @@ import android.util.Log; |
| * This class holds all listed subscriptions and manages the subscription |
| * aggregation cache folder. |
| */ |
| final class Subscriptions |
| { |
| private static final String TAG = Subscriptions.class.getSimpleName(); |
| private static final String[] USER_SUBSCRIPTIONS = |
| { Engine.USER_FILTERS_TITLE, Engine.USER_EXCEPTIONS_TITLE }; |
| + // Filters that begin with '|$' , '||$' , '@@|$' or '@@||$' need to be removed |
| + // See https://issues.adblockplus.org/ticket/4772 |
| + private static final String UNSUPPORTED_FILTERS_REGEX = "^(\\|\\$|\\|\\|\\$|@@\\|\\$|@@\\|\\|\\$).*"; |
| private final HashMap<String, Subscription> subscriptions = new HashMap<String, Subscription>(); |
| private final Engine engine; |
| private final File subscriptionFolder; |
| private final File cacheFolder; |
| private final boolean wasUnitialized; |
| private Subscriptions(final Engine engine, final File appFolder, final File cacheFolder) |
| @@ -181,18 +184,27 @@ final class Subscriptions |
| final BufferedWriter w = new BufferedWriter( |
| new OutputStreamWriter(new FileOutputStream(output), "UTF-8")); |
| try |
| { |
| Log.d(TAG, "Writing " + filters.size() + " filters"); |
| Engine.writeFilterHeaders(w); |
| for (final String filter : filters) |
| { |
| - w.write(filter); |
| - w.write('\n'); |
| + // This is a temporary fix to not write filters that might crash Samsung Internet |
| + // See https://issues.adblockplus.org/ticket/4772 |
| + if (!filter.matches(UNSUPPORTED_FILTERS_REGEX)) |
| + { |
| + w.write(filter); |
| + w.write('\n'); |
| + } |
| + else |
| + { |
| + Log.d(TAG, "Ignoring unsupported filter: " + filter); |
| + } |
| } |
| } |
| finally |
| { |
| w.close(); |
| } |
| } |