summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorgue5t <gue5t@midori.launchpad>2016-02-01 19:48:47 +0000
committerRabbitBot <>2016-02-01 19:48:47 +0000
commit038b550b2d47d0df425c8f39c05a82e9028e7cfa (patch)
tree90a071c551b5796ba3e3cb6cb28b27addff0f884 /extensions
parentf9861730eac228b8eeb0fd8b3eeae42f98851fd5 (diff)
parent279404459b2cfdac942bc51157ec2e6eb68e7927 (diff)
downloadmidori-038b550b2d47d0df425c8f39c05a82e9028e7cfa.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 23a58dcd..9868f11a 100644
--- a/extensions/adblock/extension.vala
+++ b/extensions/adblock/extension.vala
@@ -263,7 +263,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;