summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Dywan <christian@twotoasts.de>2019-02-24 23:29:08 +0100
committerGitHub <noreply@github.com>2019-02-24 23:29:08 +0100
commitb76366ee5de8a7a3fc653977fd672b2169f5f77a (patch)
treeb06ac02c998237867a9d96f62d8bffec7815d1ec
parent4e979c8d6ed1a27ba070c7ec40b4511a2dbcb436 (diff)
downloadmidori-git-b76366ee5de8a7a3fc653977fd672b2169f5f77a.tar.gz
Properly handle non-existing/ empty web extension resources (#271)
-rw-r--r--extensions/web-extensions.vala34
1 files changed, 18 insertions, 16 deletions
diff --git a/extensions/web-extensions.vala b/extensions/web-extensions.vala
index 4ea734b4..67ff9c79 100644
--- a/extensions/web-extensions.vala
+++ b/extensions/web-extensions.vala
@@ -38,7 +38,7 @@ namespace WebExtension {
string _resource = resource.has_prefix (".") ? resource.substring (1, -1) : resource;
_resource = _resource.has_prefix ("/") ? _resource.substring (1, -1) : _resource;
- if (_files != null) {
+ if (_files != null && _files.contains (_resource)) {
return _files.lookup (_resource);
}
var child = file.get_child (_resource);
@@ -136,7 +136,9 @@ namespace WebExtension {
uint8[] buffer;
int64 offset;
archive.read_data_block (out buffer, out offset);
- extension.add_resource (entry.pathname (), new Bytes (buffer));
+ if (buffer.length > 0) {
+ extension.add_resource (entry.pathname (), new Bytes (buffer));
+ }
}
}
@@ -215,26 +217,26 @@ namespace WebExtension {
}
foreach (var filename in extension.content_scripts) {
- var script = yield extension.get_resource (filename);
- if (script == null) {
+ try {
+ var script = yield extension.get_resource (filename);
+ content.add_script (new WebKit.UserScript ((string)(script.get_data ()),
+ WebKit.UserContentInjectedFrames.TOP_FRAME,
+ WebKit.UserScriptInjectionTime.END,
+ null, null));
+ } catch (Error error) {
warning ("Failed to inject content script for '%s': %s", extension.name, filename);
- continue;
}
- content.add_script (new WebKit.UserScript ((string)(script.get_data ()),
- WebKit.UserContentInjectedFrames.TOP_FRAME,
- WebKit.UserScriptInjectionTime.END,
- null, null));
}
foreach (var filename in extension.content_styles) {
- var stylesheet = yield extension.get_resource (filename);
- if (stylesheet == null) {
+ try {
+ var stylesheet = yield extension.get_resource (filename);
+ content.add_style_sheet (new WebKit.UserStyleSheet ((string)(stylesheet.get_data ()),
+ WebKit.UserContentInjectedFrames.TOP_FRAME,
+ WebKit.UserStyleLevel.USER,
+ null, null));
+ } catch (Error error) {
warning ("Failed to inject content stylesheet for '%s': %s", extension.name, filename);
- continue;
}
- content.add_style_sheet (new WebKit.UserStyleSheet ((string)(stylesheet.get_data ()),
- WebKit.UserContentInjectedFrames.TOP_FRAME,
- WebKit.UserStyleLevel.USER,
- null, null));
}
}
}