Commit bf7bb5b4 authored by ibraaaa@google.com's avatar ibraaaa@google.com

Preprocessing version number for plugins to ignore leading zeros during...

Preprocessing version number for plugins to ignore leading zeros during comparisons. This eliminates wrong version number comparisons for versions like 1.7.0_05 vs. 1.7.0_5

BUGR=137388

Review URL: https://chromiumcodereview.appspot.com/10828279

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151265 0039d316-1c4b-4281-b951-d872f2087c98
parent 1bac3104
......@@ -7,6 +7,7 @@
#include "webkit/plugins/npapi/plugin_group.h"
#include "base/memory/linked_ptr.h"
#include "base/string_split.h"
#include "base/string_util.h"
#include "base/sys_string_conversions.h"
#include "base/utf_string_conversions.h"
......@@ -99,6 +100,27 @@ bool PluginGroup::Match(const WebPluginInfo& plugin) const {
return true;
}
/* static */
std::string PluginGroup::RemoveLeadingZerosFromVersionComponents(
const std::string& version) {
std::string no_leading_zeros_version;
std::vector<std::string> numbers;
base::SplitString(version, '.', &numbers);
for (size_t i = 0; i < numbers.size(); ++i) {
size_t n = numbers[i].size();
size_t j = 0;
while (j < n && numbers[i][j] == '0') {
++j;
}
no_leading_zeros_version += (j < n) ? numbers[i].substr(j) : "0";
if (i != numbers.size() - 1) {
no_leading_zeros_version += ".";
}
}
return no_leading_zeros_version;
}
/* static */
void PluginGroup::CreateVersionFromString(const string16& version_string,
Version* parsed_version) {
......@@ -112,6 +134,9 @@ void PluginGroup::CreateVersionFromString(const string16& version_string,
std::replace(version.begin(), version.end(), '(', '.');
std::replace(version.begin(), version.end(), '_', '.');
// Remove leading zeros from each of the version components.
version = RemoveLeadingZerosFromVersionComponents(version);
*parsed_version = Version(version);
}
......
......@@ -129,6 +129,11 @@ class WEBKIT_PLUGINS_EXPORT PluginGroup {
return web_plugin_infos_;
}
// Removes leading zeros from each of the components of a version string.
// The input version string should be in this format: XXX.YYY.ZZZ...etc.
static std::string RemoveLeadingZerosFromVersionComponents(
const std::string& version);
std::string identifier_;
string16 group_name_;
string16 name_matcher_;
......
......@@ -27,12 +27,16 @@ TEST(PluginGroupTest, VersionExtraction) {
{ "10.3 d180", "10.3.180" }, // Flash (Debug)
{ "11.5.7r609", "11.5.7.609"}, // Shockwave
{ "1.6.0_22", "1.6.0.22"}, // Java
{ "1.07.00_0005", "1.7.0.5"}, // Java with leading zeros
{ "1..0", "1.0.0" } // Empty version component
};
for (size_t i = 0; i < arraysize(versions); i++) {
Version version;
PluginGroup::CreateVersionFromString(ASCIIToUTF16(versions[i][0]),
&version);
ASSERT_TRUE(version.IsValid());
EXPECT_EQ(versions[i][1], version.GetString());
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment