summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorjkummerow@chromium.org <jkummerow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-09 10:35:52 +0000
committerjkummerow@chromium.org <jkummerow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-09 10:35:52 +0000
commit7f18717e883b61612ef851695d173021aeb65cf5 (patch)
tree9cc9e090247d7c3663c5c61333234546ec44fbc0 /webkit
parentb581496c645d056c1deb82420c446f9f8fead915 (diff)
downloadchromium_src-7f18717e883b61612ef851695d173021aeb65cf5.zip
chromium_src-7f18717e883b61612ef851695d173021aeb65cf5.tar.gz
chromium_src-7f18717e883b61612ef851695d173021aeb65cf5.tar.bz2
Merge PluginGroups for Adobe Reader
This patch introduces general support in PluginGroup for multiple version ranges with one minimum secure version each, to be used e.g. for multiple major versions currently supported by their manufacturer. BUG=65207 TEST=test_shell_tests: PluginGroupTest* Review URL: http://codereview.chromium.org/5621006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@68726 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/glue/plugins/plugin_group.cc133
-rw-r--r--webkit/glue/plugins/plugin_group.h62
-rw-r--r--webkit/glue/plugins/plugin_group_unittest.cc142
-rw-r--r--webkit/glue/plugins/plugin_list.cc104
4 files changed, 289 insertions, 152 deletions
diff --git a/webkit/glue/plugins/plugin_group.cc b/webkit/glue/plugins/plugin_group.cc
index 52cc132..723a31d 100644
--- a/webkit/glue/plugins/plugin_group.cc
+++ b/webkit/glue/plugins/plugin_group.cc
@@ -13,8 +13,7 @@
#include "webkit/glue/plugins/plugin_list.h"
#include "webkit/glue/plugins/webplugininfo.h"
-const char* PluginGroup::kAdobeReader8GroupName = "Adobe Reader 8";
-const char* PluginGroup::kAdobeReader9GroupName = "Adobe Reader 9";
+const char* PluginGroup::kAdobeReaderGroupName = "Adobe Reader";
/*static*/
std::set<string16>* PluginGroup::policy_disabled_plugin_patterns_;
@@ -59,47 +58,57 @@ bool PluginGroup::IsPluginPathDisabledByPolicy(const FilePath& plugin_path) {
return false;
}
+VersionRange::VersionRange(VersionRangeDefinition definition)
+ : low_str(definition.version_matcher_low),
+ high_str(definition.version_matcher_high),
+ min_str(definition.min_version) {
+ if (!low_str.empty())
+ low.reset(Version::GetVersionFromString(low_str));
+ if (!high_str.empty())
+ high.reset(Version::GetVersionFromString(high_str));
+ if (!min_str.empty())
+ min.reset(Version::GetVersionFromString(min_str));
+}
+
+VersionRange::VersionRange(const VersionRange& other) {
+ InitFrom(other);
+}
+
+VersionRange& VersionRange::operator=(const VersionRange& other) {
+ InitFrom(other);
+ return *this;
+}
+
+void VersionRange::InitFrom(const VersionRange& other) {
+ low_str = other.low_str;
+ high_str = other.high_str;
+ min_str = other.min_str;
+ low.reset(Version::GetVersionFromString(other.low_str));
+ high.reset(Version::GetVersionFromString(other.high_str));
+ min.reset(Version::GetVersionFromString(other.min_str));
+}
+
PluginGroup::PluginGroup(const string16& group_name,
const string16& name_matcher,
- const std::string& version_range_low,
- const std::string& version_range_high,
- const std::string& min_version,
const std::string& update_url,
const std::string& identifier)
: identifier_(identifier),
group_name_(group_name),
name_matcher_(name_matcher),
- version_range_low_str_(version_range_low),
- version_range_high_str_(version_range_high),
update_url_(update_url),
enabled_(false),
- min_version_str_(min_version),
version_(Version::GetVersionFromString("0")) {
- if (!version_range_low.empty())
- version_range_low_.reset(Version::GetVersionFromString(version_range_low));
- if (!version_range_high.empty()) {
- version_range_high_.reset(
- Version::GetVersionFromString(version_range_high));
- }
- if (!min_version.empty())
- min_version_.reset(Version::GetVersionFromString(min_version));
}
void PluginGroup::InitFrom(const PluginGroup& other) {
identifier_ = other.identifier_;
group_name_ = other.group_name_;
name_matcher_ = other.name_matcher_;
- version_range_low_str_ = other.version_range_low_str_;
- version_range_high_str_ = other.version_range_high_str_;
- version_range_low_.reset(
- Version::GetVersionFromString(version_range_low_str_));
- version_range_high_.reset(
- Version::GetVersionFromString(version_range_high_str_));
description_ = other.description_;
update_url_ = other.update_url_;
enabled_ = other.enabled_;
- min_version_str_ = other.min_version_str_;
- min_version_.reset(Version::GetVersionFromString(min_version_str_));
+ for (size_t i = 0; i < other.version_ranges_.size(); ++i)
+ version_ranges_.push_back(other.version_ranges_[i]);
DCHECK_EQ(other.web_plugin_infos_.size(), other.web_plugin_positions_.size());
for (size_t i = 0; i < other.web_plugin_infos_.size(); ++i)
AddPlugin(other.web_plugin_infos_[i], other.web_plugin_positions_[i]);
@@ -112,6 +121,7 @@ PluginGroup::PluginGroup(const PluginGroup& other) {
}
PluginGroup& PluginGroup::operator=(const PluginGroup& other) {
+ version_ranges_.clear();
InitFrom(other);
return *this;
}
@@ -119,13 +129,13 @@ PluginGroup& PluginGroup::operator=(const PluginGroup& other) {
/*static*/
PluginGroup* PluginGroup::FromPluginGroupDefinition(
const PluginGroupDefinition& definition) {
- return new PluginGroup(ASCIIToUTF16(definition.name),
- ASCIIToUTF16(definition.name_matcher),
- definition.version_matcher_low,
- definition.version_matcher_high,
- definition.min_version,
- definition.update_url,
- definition.identifier);
+ PluginGroup* group = new PluginGroup(ASCIIToUTF16(definition.name),
+ ASCIIToUTF16(definition.name_matcher),
+ definition.update_url,
+ definition.identifier);
+ for (size_t i = 0; i < definition.num_versions; ++i)
+ group->version_ranges_.push_back(VersionRange(definition.versions[i]));
+ return group;
}
PluginGroup::~PluginGroup() { }
@@ -151,8 +161,7 @@ std::string PluginGroup::GetLongIdentifier(const WebPluginInfo& wpi) {
/*static*/
PluginGroup* PluginGroup::FromWebPluginInfo(const WebPluginInfo& wpi) {
// Create a matcher from the name of this plugin.
- return new PluginGroup(wpi.name, wpi.name, std::string(), std::string(),
- std::string(), std::string(),
+ return new PluginGroup(wpi.name, wpi.name, std::string(),
GetIdentifier(wpi));
}
@@ -166,12 +175,11 @@ bool PluginGroup::Match(const WebPluginInfo& plugin) const {
return false;
}
- if (version_range_low_.get() == NULL ||
- version_range_high_.get() == NULL) {
+ if (version_ranges_.empty()) {
return true;
}
- // There's a version range, we must be in it.
+ // There's at least one version range, the plugin's version must be in it.
scoped_ptr<Version> plugin_version(
Version::GetVersionFromString(UTF16ToWide(plugin.version)));
if (plugin_version.get() == NULL) {
@@ -179,9 +187,14 @@ bool PluginGroup::Match(const WebPluginInfo& plugin) const {
return false;
}
- // We match if we are in the range: [low, high)
- return (version_range_low_->CompareTo(*plugin_version) <= 0 &&
- version_range_high_->CompareTo(*plugin_version) > 0);
+ // Match if the plugin is contained in any of the defined VersionRanges.
+ for (size_t i = 0; i < version_ranges_.size(); ++i) {
+ if (IsVersionInRange(*plugin_version, version_ranges_[i])) {
+ return true;
+ }
+ }
+ // None of the VersionRanges matched.
+ return false;
}
Version* PluginGroup::CreateVersionFromString(const string16& version_string) {
@@ -322,18 +335,38 @@ DictionaryValue* PluginGroup::GetDataForUI() const {
return result;
}
+/*static*/
+bool PluginGroup::IsVersionInRange(const Version& version,
+ const VersionRange& range) {
+ DCHECK(range.low.get() != NULL || range.high.get() == NULL)
+ << "Lower bound of version range must be defined.";
+ return (range.low.get() == NULL && range.high.get() == NULL) ||
+ (range.low->CompareTo(version) <= 0 &&
+ (range.high.get() == NULL || range.high->CompareTo(version) > 0));
+}
+
+/*static*/
+bool PluginGroup::IsPluginOutdated(const Version& plugin_version,
+ const VersionRange& version_range) {
+ if (IsVersionInRange(plugin_version, version_range)) {
+ if (version_range.min.get() &&
+ plugin_version.CompareTo(*version_range.min) < 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
// Returns true if the latest version of this plugin group is vulnerable.
bool PluginGroup::IsVulnerable() const {
- if (min_version_.get() == NULL || version_->GetString() == "0") {
- return false;
+ for (size_t i = 0; i < version_ranges_.size(); ++i) {
+ if (IsPluginOutdated(*version_, version_ranges_[i]))
+ return true;
}
- return version_->CompareTo(*min_version_) < 0;
+ return false;
}
void PluginGroup::DisableOutdatedPlugins() {
- if (!min_version_.get())
- return;
-
description_ = string16();
enabled_ = false;
@@ -341,9 +374,13 @@ void PluginGroup::DisableOutdatedPlugins() {
web_plugin_infos_.begin();
it != web_plugin_infos_.end(); ++it) {
scoped_ptr<Version> version(CreateVersionFromString(it->version));
- if (version.get() && version->CompareTo(*min_version_) < 0) {
- it->enabled = false;
- NPAPI::PluginList::Singleton()->DisablePlugin(it->path);
+ if (version.get()) {
+ for (size_t i = 0; i < version_ranges_.size(); ++i) {
+ if (IsPluginOutdated(*version, version_ranges_[i])) {
+ it->enabled = false;
+ NPAPI::PluginList::Singleton()->DisablePlugin(it->path);
+ }
+ }
}
UpdateActivePlugin(*it);
}
diff --git a/webkit/glue/plugins/plugin_group.h b/webkit/glue/plugins/plugin_group.h
index a2d1aaf..e916b84 100644
--- a/webkit/glue/plugins/plugin_group.h
+++ b/webkit/glue/plugins/plugin_group.h
@@ -21,23 +21,47 @@ class Version;
struct WebPluginInfo;
namespace NPAPI {
- class PluginList;
+class PluginList;
+};
+
+// Hard-coded version ranges for plugin groups.
+struct VersionRangeDefinition {
+ // Matcher for lowest version matched by this range (inclusive). May be empty
+ // to match everything iff |version_matcher_high| is also empty.
+ const char* version_matcher_low;
+ // Matcher for highest version matched by this range (exclusive). May be empty
+ // to match anything higher than |version_matcher_low|.
+ const char* version_matcher_high;
+ const char* min_version; // Minimum secure version.
};
-namespace plugin_test_internal {
-class PluginExceptionsTableModelTest;
-}
// Hard-coded definitions of plugin groups.
struct PluginGroupDefinition {
const char* identifier; // Unique identifier for this group.
const char* name; // Name of this group.
const char* name_matcher; // Substring matcher for the plugin name.
- const char* version_matcher_low; // Matchers for the plugin version.
- const char* version_matcher_high;
- const char* min_version; // Minimum secure version.
+ const VersionRangeDefinition* versions; // List of version ranges.
+ const size_t num_versions; // Size of the array |versions| points to.
const char* update_url; // Location of latest secure version.
};
+// Run-time structure to hold version range information.
+struct VersionRange {
+ public:
+ explicit VersionRange(VersionRangeDefinition definition);
+ VersionRange(const VersionRange& other);
+ VersionRange& operator=(const VersionRange& other);
+
+ std::string low_str;
+ std::string high_str;
+ std::string min_str;
+ scoped_ptr<Version> low;
+ scoped_ptr<Version> high;
+ scoped_ptr<Version> min;
+ private:
+ void InitFrom(const VersionRange& other);
+};
+
// A PluginGroup can match a range of versions of a specific plugin (as defined
// by matching a substring of its name).
// It contains all WebPluginInfo structs (at least one) matching its definition.
@@ -49,8 +73,7 @@ class PluginGroup {
public:
// Used by about:plugins to disable Reader plugin when internal PDF viewer is
// enabled.
- static const char* kAdobeReader8GroupName;
- static const char* kAdobeReader9GroupName;
+ static const char* kAdobeReaderGroupName;
PluginGroup(const PluginGroup& other);
@@ -118,7 +141,7 @@ class PluginGroup {
friend class NPAPI::PluginList;
friend class PluginGroupTest;
friend class TableModelArrayControllerTest;
- friend class plugin_test_internal::PluginExceptionsTableModelTest;
+ friend class PluginExceptionsTableModelTest;
// Generates the (short) identifier string for the given plugin.
static std::string GetIdentifier(const WebPluginInfo& wpi);
@@ -136,11 +159,17 @@ class PluginGroup {
// the created PluginGroup.
static PluginGroup* FromWebPluginInfo(const WebPluginInfo& wpi);
+ // Returns |true| if |version| is contained in [low, high) of |range|.
+ static bool IsVersionInRange(const Version& version,
+ const VersionRange& range);
+
+ // Returns |true| iff |plugin_version| is both contained in |version_range|
+ // and declared outdated (== vulnerable) by it.
+ static bool IsPluginOutdated(const Version& plugin_version,
+ const VersionRange& version_range);
+
PluginGroup(const string16& group_name,
const string16& name_matcher,
- const std::string& version_range_low,
- const std::string& version_range_high,
- const std::string& min_version,
const std::string& update_url,
const std::string& identifier);
@@ -161,15 +190,10 @@ class PluginGroup {
std::string identifier_;
string16 group_name_;
string16 name_matcher_;
- std::string version_range_low_str_;
- std::string version_range_high_str_;
- scoped_ptr<Version> version_range_low_;
- scoped_ptr<Version> version_range_high_;
string16 description_;
std::string update_url_;
bool enabled_;
- std::string min_version_str_;
- scoped_ptr<Version> min_version_;
+ std::vector<VersionRange> version_ranges_;
scoped_ptr<Version> version_;
std::vector<WebPluginInfo> web_plugin_infos_;
std::vector<int> web_plugin_positions_;
diff --git a/webkit/glue/plugins/plugin_group_unittest.cc b/webkit/glue/plugins/plugin_group_unittest.cc
index 1868fb4..31dee1e 100644
--- a/webkit/glue/plugins/plugin_group_unittest.cc
+++ b/webkit/glue/plugins/plugin_group_unittest.cc
@@ -16,16 +16,34 @@
#include "webkit/glue/plugins/webplugininfo.h"
#include "webkit/glue/plugins/plugin_list.h"
+static const VersionRangeDefinition kPluginVersionRange[] = {
+ { "", "", "3.0.44" }
+};
+static const VersionRangeDefinition kPlugin3VersionRange[] = {
+ { "0", "4", "3.0.44" }
+};
+static const VersionRangeDefinition kPlugin4VersionRange[] = {
+ { "4", "5", "4.0.44" }
+};
+static const VersionRangeDefinition kPlugin34VersionRange[] = {
+ { "0", "4", "3.0.44" },
+ { "4", "5", "4.0.44" }
+};
+
static const PluginGroupDefinition kPluginDef = {
- "myplugin", "MyPlugin", "MyPlugin", "", "", "3.0.44", "http://latest/" };
+ "myplugin", "MyPlugin", "MyPlugin", kPluginVersionRange, 1,
+ "http://latest/" };
static const PluginGroupDefinition kPluginDef3 = {
- "myplugin-3", "MyPlugin 3", "MyPlugin", "0", "4", "3.0.44",
+ "myplugin-3", "MyPlugin 3", "MyPlugin", kPlugin3VersionRange, 1,
"http://latest" };
static const PluginGroupDefinition kPluginDef4 = {
- "myplugin-4", "MyPlugin 4", "MyPlugin", "4", "5", "4.0.44",
+ "myplugin-4", "MyPlugin 4", "MyPlugin", kPlugin4VersionRange, 1,
+ "http://latest" };
+static const PluginGroupDefinition kPluginDef34 = {
+ "myplugin-34", "MyPlugin 3/4", "MyPlugin", kPlugin34VersionRange, 2,
"http://latest" };
static const PluginGroupDefinition kPluginDefNotVulnerable = {
- "myplugin-latest", "MyPlugin", "MyPlugin", "", "", "", "http://latest" };
+ "myplugin-latest", "MyPlugin", "MyPlugin", NULL, 0, "http://latest" };
// name, path, version, desc, mime_types, enabled.
static WebPluginInfo kPlugin2043 = WebPluginInfo(
@@ -78,55 +96,64 @@ TEST(PluginGroupTest, PluginGroupMatchCorrectVersion) {
EXPECT_FALSE(group->Match(kPlugin2043));
EXPECT_FALSE(group->Match(kPlugin3043));
EXPECT_TRUE(group->Match(kPlugin4043));
+
+ group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef34));
+ EXPECT_TRUE(group->Match(kPlugin2043));
+ EXPECT_TRUE(group->Match(kPlugin3043));
+ EXPECT_TRUE(group->Match(kPlugin4043));
}
TEST(PluginGroupTest, PluginGroupDescription) {
string16 desc3043(ASCIIToUTF16("MyPlugin version 3.0.43"));
string16 desc3045(ASCIIToUTF16("MyPlugin version 3.0.45"));
- WebPluginInfo plugin3043(kPlugin3043);
- WebPluginInfo plugin3045(kPlugin3045);
-
- {
- scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
- kPluginDef3));
- EXPECT_TRUE(group->Match(plugin3043));
- group->AddPlugin(plugin3043, 0);
- EXPECT_EQ(desc3043, group->description());
- EXPECT_TRUE(group->IsVulnerable());
- EXPECT_TRUE(group->Match(plugin3045));
- group->AddPlugin(plugin3045, 1);
- EXPECT_EQ(desc3043, group->description());
- EXPECT_TRUE(group->IsVulnerable());
- }
- {
- // Disable the first plugin.
- plugin3043.enabled = false;
- scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
- kPluginDef3));
- EXPECT_TRUE(group->Match(plugin3043));
- group->AddPlugin(plugin3043, 0);
- EXPECT_EQ(desc3043, group->description());
- EXPECT_TRUE(group->IsVulnerable());
- EXPECT_TRUE(group->Match(plugin3045));
- group->AddPlugin(plugin3045, 1);
- EXPECT_EQ(desc3045, group->description());
- EXPECT_FALSE(group->IsVulnerable());
- }
-
- {
- // Disable the second plugin.
- plugin3045.enabled = false;
- scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
- kPluginDef3));
- EXPECT_TRUE(group->Match(plugin3043));
- group->AddPlugin(plugin3043, 1);
- EXPECT_EQ(desc3043, group->description());
- EXPECT_TRUE(group->IsVulnerable());
- EXPECT_TRUE(group->Match(plugin3045));
- group->AddPlugin(plugin3045, 0);
- EXPECT_EQ(desc3043, group->description());
- EXPECT_TRUE(group->IsVulnerable());
+ PluginGroupDefinition plugindefs[] = { kPluginDef3, kPluginDef34 };
+ for (size_t i = 0; i < 2; ++i) {
+ WebPluginInfo plugin3043(kPlugin3043);
+ WebPluginInfo plugin3045(kPlugin3045);
+ {
+ scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
+ plugindefs[i]));
+ EXPECT_TRUE(group->Match(plugin3043));
+ group->AddPlugin(plugin3043, 0);
+ EXPECT_EQ(desc3043, group->description());
+ EXPECT_TRUE(group->IsVulnerable());
+ EXPECT_TRUE(group->Match(plugin3045));
+ group->AddPlugin(plugin3045, 1);
+ EXPECT_EQ(desc3043, group->description());
+ EXPECT_TRUE(group->IsVulnerable());
+ }
+
+ {
+ // Disable the first plugin.
+ plugin3043.enabled = false;
+ scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
+ plugindefs[i]));
+ EXPECT_TRUE(group->Match(plugin3043));
+ group->AddPlugin(plugin3043, 0);
+ EXPECT_EQ(desc3043, group->description());
+ EXPECT_TRUE(group->IsVulnerable());
+ EXPECT_FALSE(group->Enabled());
+ EXPECT_TRUE(group->Match(plugin3045));
+ group->AddPlugin(plugin3045, 1);
+ EXPECT_EQ(desc3045, group->description());
+ EXPECT_FALSE(group->IsVulnerable());
+ }
+
+ {
+ // Disable the second plugin.
+ plugin3045.enabled = false;
+ scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
+ plugindefs[i]));
+ EXPECT_TRUE(group->Match(plugin3043));
+ group->AddPlugin(plugin3043, 1);
+ EXPECT_EQ(desc3043, group->description());
+ EXPECT_TRUE(group->IsVulnerable());
+ EXPECT_TRUE(group->Match(plugin3045));
+ group->AddPlugin(plugin3045, 0);
+ EXPECT_EQ(desc3043, group->description());
+ EXPECT_TRUE(group->IsVulnerable());
+ }
}
}
@@ -144,16 +171,19 @@ TEST(PluginGroupTest, PluginGroupDefinition) {
}
TEST(PluginGroupTest, DisableOutdated) {
- scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
- kPluginDef3));
- group->AddPlugin(kPlugin3043, 0);
- group->AddPlugin(kPlugin3045, 1);
- EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.43"), group->description());
- EXPECT_TRUE(group->IsVulnerable());
+ PluginGroupDefinition plugindefs[] = { kPluginDef3, kPluginDef34 };
+ for (size_t i = 0; i < 2; ++i) {
+ scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(
+ plugindefs[i]));
+ group->AddPlugin(kPlugin3043, 0);
+ group->AddPlugin(kPlugin3045, 1);
+ EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.43"), group->description());
+ EXPECT_TRUE(group->IsVulnerable());
- group->DisableOutdatedPlugins();
- EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.45"), group->description());
- EXPECT_FALSE(group->IsVulnerable());
+ group->DisableOutdatedPlugins();
+ EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.45"), group->description());
+ EXPECT_FALSE(group->IsVulnerable());
+ }
}
TEST(PluginGroupTest, VersionExtraction) {
diff --git a/webkit/glue/plugins/plugin_list.cc b/webkit/glue/plugins/plugin_list.cc
index 922f6ce..d682cce 100644
--- a/webkit/glue/plugins/plugin_list.cc
+++ b/webkit/glue/plugins/plugin_list.cc
@@ -32,56 +32,102 @@ namespace NPAPI {
// Plugins are listed here as soon as vulnerabilities and solutions
// (new versions) are published.
// TODO(panayiotis): Get the Real Player version on Mac, somehow.
+static const VersionRangeDefinition kQuicktimeVersionRange[] = {
+ { "", "", "7.6.6" }
+};
+static const VersionRangeDefinition kJavaVersionRange[] = {
+ { "", "", "" }
+};
+static const VersionRangeDefinition kFlashVersionRange[] = {
+ { "", "", "10.1.102" }
+};
+static const VersionRangeDefinition kSilverlightVersionRange[] = {
+ { "0", "4", "3.0.50106.0" },
+ { "4", "5", "" }
+};
+static const VersionRangeDefinition kFlip4MacVersionRange[] = {
+ { "", "", "2.2.1" }
+};
+static const VersionRangeDefinition kShockwaveVersionRange[] = {
+ { "", "", "11.5.9.615" }
+};
static const PluginGroupDefinition kGroupDefinitions[] = {
- { "apple-quicktime", "Quicktime", "QuickTime Plug-in", "", "", "7.6.6",
+ { "apple-quicktime", "Quicktime", "QuickTime Plug-in", kQuicktimeVersionRange,
+ arraysize(kQuicktimeVersionRange),
"http://www.apple.com/quicktime/download/" },
- { "java-runtime-environment", "Java", "Java", "", "", "",
- "http://support.apple.com/kb/HT1338" },
- { "adobe-flash-player", "Flash", "Shockwave Flash", "", "", "10.1.102",
- "http://get.adobe.com/flashplayer/" },
- { "silverlight-3", "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0",
+ { "java-runtime-environment", "Java", "Java", kJavaVersionRange,
+ arraysize(kJavaVersionRange), "http://support.apple.com/kb/HT1338" },
+ { "adobe-flash-player", "Flash", "Shockwave Flash", kFlashVersionRange,
+ arraysize(kFlashVersionRange), "http://get.adobe.com/flashplayer/" },
+ { "silverlight", "Silverlight", "Silverlight", kSilverlightVersionRange,
+ arraysize(kSilverlightVersionRange),
"http://www.microsoft.com/getsilverlight/" },
- { "silverlight-4", "Silverlight 4", "Silverlight", "4", "5", "",
- "http://www.microsoft.com/getsilverlight/" },
- { "flip4mac", "Flip4Mac", "Flip4Mac", "", "", "2.2.1",
+ { "flip4mac", "Flip4Mac", "Flip4Mac", kFlip4MacVersionRange,
+ arraysize(kFlip4MacVersionRange),
"http://www.telestream.net/flip4mac-wmv/overview.htm" },
- { "shockwave", "Shockwave", "Shockwave for Director", "", "", "11.5.9.615",
+ { "shockwave", "Shockwave", "Shockwave for Director", kShockwaveVersionRange,
+ arraysize(kShockwaveVersionRange),
"http://www.adobe.com/shockwave/download/" }
};
#elif defined(OS_WIN)
// TODO(panayiotis): We should group "RealJukebox NS Plugin" with the rest of
// the RealPlayer files.
+static const VersionRangeDefinition kQuicktimeVersionRange[] = {
+ { "", "", "7.6.8" }
+};
+static const VersionRangeDefinition kJavaVersionRange[] = {
+ { "0", "7", "6.0.220" } // "220" is not a typo.
+};
+static const VersionRangeDefinition kAdobeReaderVersionRange[] = {
+ { "10", "11", "" },
+ { "9", "10", "9.4.1" },
+ { "0", "9", "8.2.5" }
+};
+static const VersionRangeDefinition kFlashVersionRange[] = {
+ { "", "", "10.1.102" }
+};
+static const VersionRangeDefinition kSilverlightVersionRange[] = {
+ { "0", "4", "3.0.50106.0" },
+ { "4", "5", "" }
+};
+static const VersionRangeDefinition kShockwaveVersionRange[] = {
+ { "", "", "11.5.9.615" }
+};
+static const VersionRangeDefinition kDivXVersionRange[] = {
+ { "", "", "1.4.3.4" }
+};
static const PluginGroupDefinition kGroupDefinitions[] = {
- { "apple-quicktime", "Quicktime", "QuickTime Plug-in", "", "", "7.6.8",
+ { "apple-quicktime", "Quicktime", "QuickTime Plug-in", kQuicktimeVersionRange,
+ arraysize(kQuicktimeVersionRange),
"http://www.apple.com/quicktime/download/" },
- { "java-runtime-environment", "Java 6", "Java", "", "6", "6.0.220",
- "http://www.java.com/" },
- { "adobe-reader", PluginGroup::kAdobeReader9GroupName, "Adobe Acrobat", "9",
- "10", "9.4.1", "http://get.adobe.com/reader/" },
- { "adobe-reader-8", PluginGroup::kAdobeReader8GroupName, "Adobe Acrobat", "0",
- "9", "8.2.5", "http://get.adobe.com/reader/" },
- { "adobe-flash-player", "Flash", "Shockwave Flash", "", "", "10.1.102",
- "http://get.adobe.com/flashplayer/" },
- { "silverlight-3", "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0",
+ { "java-runtime-environment", "Java 6", "Java", kJavaVersionRange,
+ arraysize(kJavaVersionRange), "http://www.java.com/" },
+ { "adobe-reader", PluginGroup::kAdobeReaderGroupName, "Adobe Acrobat",
+ kAdobeReaderVersionRange, arraysize(kAdobeReaderVersionRange),
+ "http://get.adobe.com/reader/" },
+ { "adobe-flash-player", "Flash", "Shockwave Flash", kFlashVersionRange,
+ arraysize(kFlashVersionRange), "http://get.adobe.com/flashplayer/" },
+ { "silverlight", "Silverlight", "Silverlight", kSilverlightVersionRange,
+ arraysize(kSilverlightVersionRange),
"http://www.microsoft.com/getsilverlight/" },
- { "silverlight-4", "Silverlight 4", "Silverlight", "4", "5", "",
- "http://www.microsoft.com/getsilverlight/" },
- { "shockwave", "Shockwave", "Shockwave for Director", "", "", "11.5.9.615",
+ { "shockwave", "Shockwave", "Shockwave for Director", kShockwaveVersionRange,
+ arraysize(kShockwaveVersionRange),
"http://www.adobe.com/shockwave/download/" },
- { "divx-player", "DivX Player", "DivX Web Player", "", "", "1.4.3.4",
+ { "divx-player", "DivX Player", "DivX Web Player", kDivXVersionRange,
+ arraysize(kDivXVersionRange),
"http://download.divx.com/divx/autoupdate/player/"
"DivXWebPlayerInstaller.exe" },
- // These are here for grouping, no vulnerabilies known.
+ // These are here for grouping, no vulnerabilities known.
{ "windows-media-player", "Windows Media Player", "Windows Media Player",
- "", "", "", "" },
+ NULL, 0, "" },
{ "microsoft-office", "Microsoft Office", "Microsoft Office",
- "", "", "", "" },
+ NULL, 0, "" },
// TODO(panayiotis): The vulnerable versions are
// (v >= 6.0.12.1040 && v <= 6.0.12.1663)
// || v == 6.0.12.1698 || v == 6.0.12.1741
- { "realplayer", "RealPlayer", "RealPlayer", "", "", "",
- "http://www.adobe.com/shockwave/download/" },
+ { "realplayer", "RealPlayer", "RealPlayer", NULL, 0,
+ "www.real.com/realplayer/downloads" },
};
#else