summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorgue5t <gue5t@midori.launchpad>2016-01-23 15:31:11 -0600
committergue5t <gue5t@midori.launchpad>2016-01-23 15:31:11 -0600
commit279404459b2cfdac942bc51157ec2e6eb68e7927 (patch)
treea386b4f7c0de023c86e8a96dda91e4bad9bde512 /extensions
parent914c221c5c4090e98af55043eac54c8220a4538f (diff)
downloadmidori-279404459b2cfdac942bc51157ec2e6eb68e7927.tar.gz
Fix crashes caused by out-of-bounds indexing in adblock
Diffstat (limited to 'extensions')
-rw-r--r--extensions/adblock/extension.vala2
-rw-r--r--extensions/adblock/updater.vala37
2 files changed, 21 insertions, 18 deletions
diff --git a/extensions/adblock/extension.vala b/extensions/adblock/extension.vala
index 7ea43be9..6e8641e6 100644
--- a/extensions/adblock/extension.vala
+++ b/extensions/adblock/extension.vala
@@ -256,7 +256,7 @@ namespace Adblock {
string[]? domains = null;
string domain = Midori.URI.parse_hostname (uri, null);
string[] subdomains = domain.split (".");
- if (subdomains == null)
+ if (subdomains == null || subdomains.length == 0)
return null;
int cnt = subdomains.length - 1;
var subdomain = new StringBuilder (subdomains[cnt]);
diff --git a/extensions/adblock/updater.vala b/extensions/adblock/updater.vala
index bcbb9b63..9a1b68f8 100644
--- a/extensions/adblock/updater.vala
+++ b/extensions/adblock/updater.vala
@@ -100,27 +100,30 @@ namespace Adblock {
y = int.parse(date_parts[0]);
d = int.parse(date_parts[2]);
}
+ last_updated = new DateTime.local (y, m, d, h, min, 0.0);
} else { /* Date in a form of: 20 Mar 2012 12:34 */
string[] parts = last_mod_meta.split (" ", 4);
- /* contains time part ? */
- if (parts[3] != null && parts[3].contains (":")) {
- string[] time_parts = parts[3].split (":", 2);
- h = int.parse(time_parts[0]);
- min = int.parse(time_parts[1]);
- }
-
- m = get_month_from_string (parts[1]);
- if (parts[2].length == 4) {
- y = int.parse(parts[2]);
- d = int.parse(parts[0]);
- } else {
- y = int.parse(parts[0]);
- d = int.parse(parts[2]);
+ if (parts.length >= 3) {
+ /* contains time part ? */
+ if (parts.length >= 4 && parts[3].contains (":")) {
+ string[] time_parts = parts[3].split (":", 2);
+ h = int.parse(time_parts[0]);
+ min = int.parse(time_parts[1]);
+ }
+
+ m = get_month_from_string (parts[1]);
+ if (parts[2].length == 4) {
+ y = int.parse(parts[2]);
+ d = int.parse(parts[0]);
+ } else {
+ y = int.parse(parts[0]);
+ d = int.parse(parts[2]);
+ }
+ last_updated = new DateTime.local (y, m, d, h, min, 0.0);
}
}
-
- last_updated = new DateTime.local (y, m, d, h, min, 0.0);
- } else {
+ }
+ if (last_updated == null) {
/* FIXME: use file modification date if there's no update header
try {
string modified = FileAttribute.TIME_MODIFIED;