Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8421)

Unified Diff: chrome/common/extensions/extension.cc

Issue 126074: Change extension id format back to mp-decimal, and change the (Closed)
Patch Set: make all the tests work again Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/extension.cc
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 73eb417cc9e49547bc8ead23be9fd68016bd9a03..ed07420d4284aaa199c6a6815939d8df480c8d7b 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -35,6 +35,15 @@ namespace {
const char kPrivate[] = "PRIVATE";
const int kRSAKeySize = 1024;
+
+ // Converts a normal hexadecimal string into the alphabet used by extensions.
+ // We use the characters 'a'-'p' instead of '0'-'f' to avoid ever having a
+ // completely numeric host, since some software interprets that as an IP
+ // address.
+ static void ConvertHexadecimalToIDAlphabet(std::string* id) {
+ for (size_t i = 0; i < id->size(); ++i)
+ (*id)[i] = HexStringToInt(id->substr(i, 1)) + 'a';
+ }
};
int Extension::id_counter_ = 0;
@@ -176,8 +185,8 @@ const char* Extension::kExtensionRegistryPath =
"Software\\Google\\Chrome\\Extensions";
#endif
-// first 20 bytes of SHA256 hashed public key.
-const size_t Extension::kIdSize = 20;
+// first 16 bytes of SHA256 hashed public key.
+const size_t Extension::kIdSize = 16;
Extension::~Extension() {
for (PageActionMap::iterator i = page_actions_.begin();
@@ -191,18 +200,16 @@ const std::string Extension::VersionString() const {
// static
bool Extension::IdIsValid(const std::string& id) {
- // Verify that the id is legal. The id is a hex string of the SHA-1 hash of
- // the public key.
- std::vector<uint8> id_bytes;
- if (!HexStringToBytes(id, &id_bytes) || id_bytes.size() != kIdSize)
+ // Verify that the id is legal.
+ if (id.size() != (kIdSize * 2))
return false;
// We only support lowercase IDs, because IDs can be used as URL components
// (where GURL will lowercase it).
- std::string temp = id;
- StringToLowerASCII(temp);
- if (temp != id)
- return false;
+ std::string temp = StringToLowerASCII(id);
+ for (size_t i = 0; i < temp.size(); i++)
+ if (temp[i] < 'a' || temp[i] > 'p')
+ return false;
return true;
}
@@ -253,6 +260,7 @@ bool Extension::GenerateIdFromPublicKey(const std::string& input,
uint8 hash[Extension::kIdSize];
SHA256_End(&ctx, hash, NULL, sizeof(hash));
*output = StringToLowerASCII(HexEncode(hash, sizeof(hash)));
+ ConvertHexadecimalToIDAlphabet(output);
return true;
}
@@ -609,6 +617,9 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_id,
// pad the string out to kIdSize*2 chars with zeroes.
id_.insert(0, Extension::kIdSize*2 - id_.length(), '0');
+
+ // Convert to our mp-decimal.
+ ConvertHexadecimalToIDAlphabet(&id_);
}
// Initialize the URL.
« no previous file with comments | « chrome/browser/extensions/extensions_service_unittest.cc ('k') | chrome/common/extensions/extension_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698