summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-26 23:39:50 +0000
committerdominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-26 23:39:50 +0000
commita3bcff633580fa9afd4653817f497d8a49235994 (patch)
treed81bbfab47ed019ea0eb47ccdfb914944f7bafdf
parentd045e3746c58aa12b603dc596e683f4f9f14f5a9 (diff)
downloadchromium_src-a3bcff633580fa9afd4653817f497d8a49235994.zip
chromium_src-a3bcff633580fa9afd4653817f497d8a49235994.tar.gz
chromium_src-a3bcff633580fa9afd4653817f497d8a49235994.tar.bz2
MD5Update function uses StringPiece instead of raw buffer.
BUG=none TEST=base_unittests --gtest_filter=MD5.ContextWithStringData* Review URL: http://codereview.chromium.org/7466003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94203 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/md5.cc14
-rw-r--r--base/md5.h13
-rw-r--r--base/md5_unittest.cc18
-rw-r--r--chrome/browser/bookmarks/bookmark_codec.cc7
-rw-r--r--chrome/browser/metrics/metrics_service.cc4
-rw-r--r--chrome/browser/safe_browsing/prefix_set.cc23
-rw-r--r--chrome/browser/safe_browsing/prefix_set_unittest.cc2
-rw-r--r--chrome/browser/safe_browsing/safe_browsing_store_file.cc14
-rw-r--r--chrome/browser/sync/util/user_settings.cc8
-rw-r--r--chrome/common/metrics_helpers.cc2
-rw-r--r--chrome/common/visitedlink_common.cc5
-rw-r--r--media/test/ffmpeg_tests/ffmpeg_tests.cc15
-rw-r--r--media/tools/media_bench/media_bench.cc14
-rw-r--r--net/http/http_vary_data.cc2
14 files changed, 97 insertions, 44 deletions
diff --git a/base/md5.cc b/base/md5.cc
index 2211a28..754994c 100644
--- a/base/md5.cc
+++ b/base/md5.cc
@@ -1,5 +1,8 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
// The original file was copied from sqlite, and was in the public domain.
-// Modifications Copyright 2006 Google Inc. All Rights Reserved
/*
* This code implements the MD5 message-digest algorithm.
@@ -164,7 +167,9 @@ void MD5Init(MD5Context* context) {
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
-void MD5Update(MD5Context* context, const void* inbuf, size_t len) {
+void MD5Update(MD5Context* context, const StringPiece& data) {
+ const unsigned char* inbuf = (const unsigned char*)data.data();
+ size_t len = data.size();
struct Context *ctx = (struct Context *)context;
const unsigned char* buf = (const unsigned char*)inbuf;
uint32 t;
@@ -273,11 +278,12 @@ std::string MD5DigestToBase16(const MD5Digest& digest) {
void MD5Sum(const void* data, size_t length, MD5Digest* digest) {
MD5Context ctx;
MD5Init(&ctx);
- MD5Update(&ctx, static_cast<const unsigned char*>(data), length);
+ MD5Update(&ctx,
+ StringPiece(reinterpret_cast<const char*>(data), length));
MD5Final(digest, &ctx);
}
-std::string MD5String(const std::string& str) {
+std::string MD5String(const StringPiece& str) {
MD5Digest digest;
MD5Sum(str.data(), str.length(), &digest);
return MD5DigestToBase16(digest);
diff --git a/base/md5.h b/base/md5.h
index a317329..5a1762b 100644
--- a/base/md5.h
+++ b/base/md5.h
@@ -6,9 +6,8 @@
#define BASE_MD5_H_
#pragma once
-#include <string>
-
#include "base/base_api.h"
+#include "base/string_piece.h"
namespace base {
@@ -52,10 +51,10 @@ BASE_API void MD5Sum(const void* data, size_t length, MD5Digest* digest);
// MD5Update().
BASE_API void MD5Init(MD5Context* context);
-// For the given buffer of data, updates the given MD5 context with the sum of
-// the data. You can call this any number of times during the computation,
-// except that MD5Init() must have been called first.
-BASE_API void MD5Update(MD5Context* context, const void* data, size_t length);
+// For the given buffer of |data| as a StringPiece, updates the given MD5
+// context with the sum of the data. You can call this any number of times
+// during the computation, except that MD5Init() must have been called first.
+BASE_API void MD5Update(MD5Context* context, const StringPiece& data);
// Finalizes the MD5 operation and fills the buffer with the digest.
BASE_API void MD5Final(MD5Digest* digest, MD5Context* context);
@@ -64,7 +63,7 @@ BASE_API void MD5Final(MD5Digest* digest, MD5Context* context);
BASE_API std::string MD5DigestToBase16(const MD5Digest& digest);
// Returns the MD5 (in hexadecimal) of a string.
-BASE_API std::string MD5String(const std::string& str);
+BASE_API std::string MD5String(const StringPiece& str);
} // namespace base
diff --git a/base/md5_unittest.cc b/base/md5_unittest.cc
index c81ff12..a20d819 100644
--- a/base/md5_unittest.cc
+++ b/base/md5_unittest.cc
@@ -120,7 +120,8 @@ TEST(MD5, ContextWithLongData) {
if (len > length - total)
len = length - total;
- MD5Update(&ctx, data.get() + total, len);
+ MD5Update(&ctx,
+ StringPiece(reinterpret_cast<char*>(data.get() + total), len));
total += len;
}
@@ -188,4 +189,19 @@ TEST(MD5, MD5StringTestSuite7) {
EXPECT_EQ(expected, actual);
}
+TEST(MD5, ContextWithStringData) {
+ MD5Context ctx;
+ MD5Init(&ctx);
+
+ MD5Update(&ctx, "abc");
+
+ MD5Digest digest;
+ MD5Final(&digest, &ctx);
+
+ std::string actual = MD5DigestToBase16(digest);
+ std::string expected = "900150983cd24fb0d6963f7d28e17f72";
+
+ EXPECT_EQ(expected, actual);
+}
+
} // namespace base
diff --git a/chrome/browser/bookmarks/bookmark_codec.cc b/chrome/browser/bookmarks/bookmark_codec.cc
index 548587d..dd0a576 100644
--- a/chrome/browser/bookmarks/bookmark_codec.cc
+++ b/chrome/browser/bookmarks/bookmark_codec.cc
@@ -338,11 +338,14 @@ void BookmarkCodec::ReassignIDsHelper(BookmarkNode* node) {
}
void BookmarkCodec::UpdateChecksum(const std::string& str) {
- base::MD5Update(&md5_context_, str.data(), str.length() * sizeof(char));
+ base::MD5Update(&md5_context_, str);
}
void BookmarkCodec::UpdateChecksum(const string16& str) {
- base::MD5Update(&md5_context_, str.data(), str.length() * sizeof(char16));
+ base::MD5Update(&md5_context_,
+ base::StringPiece(
+ reinterpret_cast<const char*>(str.data()),
+ str.length() * sizeof(str[0])));
}
void BookmarkCodec::UpdateChecksumWithUrlNode(const std::string& id,
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
index 45e228d..b3039d7 100644
--- a/chrome/browser/metrics/metrics_service.cc
+++ b/chrome/browser/metrics/metrics_service.cc
@@ -1134,7 +1134,7 @@ MetricsService::LogRecallStatus MetricsService::RecallUnsentLogsHelper(
return MakeRecallStatusHistogram(LOG_STRING_CORRUPTION);
}
- base::MD5Update(&ctx, encoded_log.data(), encoded_log.length());
+ base::MD5Update(&ctx, encoded_log);
if (!base::Base64Decode(encoded_log, &decoded_log)) {
local_list->clear();
@@ -1200,7 +1200,7 @@ void MetricsService::StoreUnsentLogsHelper(
list->Clear();
return;
}
- base::MD5Update(&ctx, encoded_log.data(), encoded_log.length());
+ base::MD5Update(&ctx, encoded_log);
list->Append(Value::CreateStringValue(encoded_log));
}
diff --git a/chrome/browser/safe_browsing/prefix_set.cc b/chrome/browser/safe_browsing/prefix_set.cc
index 13890a0..9d568cb 100644
--- a/chrome/browser/safe_browsing/prefix_set.cc
+++ b/chrome/browser/safe_browsing/prefix_set.cc
@@ -192,7 +192,8 @@ PrefixSet* PrefixSet::LoadFile(const FilePath& filter_name) {
// The file looks valid, start building the digest.
base::MD5Context context;
base::MD5Init(&context);
- base::MD5Update(&context, &header, sizeof(header));
+ base::MD5Update(&context, base::StringPiece(reinterpret_cast<char*>(&header),
+ sizeof(header)));
// Read the index vector. Herb Sutter indicates that vectors are
// guaranteed to be contiuguous, so reading to where element 0 lives
@@ -201,14 +202,18 @@ PrefixSet* PrefixSet::LoadFile(const FilePath& filter_name) {
read = fread(&(index[0]), sizeof(index[0]), index.size(), file.get());
if (read != index.size())
return NULL;
- base::MD5Update(&context, &(index[0]), index_bytes);
+ base::MD5Update(&context,
+ base::StringPiece(reinterpret_cast<char*>(&(index[0])),
+ index_bytes));
// Read vector of deltas.
deltas.resize(header.deltas_size);
read = fread(&(deltas[0]), sizeof(deltas[0]), deltas.size(), file.get());
if (read != deltas.size())
return NULL;
- base::MD5Update(&context, &(deltas[0]), deltas_bytes);
+ base::MD5Update(&context,
+ base::StringPiece(reinterpret_cast<char*>(&(deltas[0])),
+ deltas_bytes));
base::MD5Digest calculated_digest;
base::MD5Final(&calculated_digest, &context);
@@ -251,7 +256,8 @@ bool PrefixSet::WriteFile(const FilePath& filter_name) const {
size_t written = fwrite(&header, sizeof(header), 1, file.get());
if (written != 1)
return false;
- base::MD5Update(&context, &header, sizeof(header));
+ base::MD5Update(&context, base::StringPiece(reinterpret_cast<char*>(&header),
+ sizeof(header)));
// As for reads, the standard guarantees the ability to access the
// contents of the vector by a pointer to an element.
@@ -259,14 +265,19 @@ bool PrefixSet::WriteFile(const FilePath& filter_name) const {
written = fwrite(&(index_[0]), sizeof(index_[0]), index_.size(), file.get());
if (written != index_.size())
return false;
- base::MD5Update(&context, &(index_[0]), index_bytes);
+ base::MD5Update(&context,
+ base::StringPiece(reinterpret_cast<const char*>(&(index_[0])),
+ index_bytes));
const size_t deltas_bytes = sizeof(deltas_[0]) * deltas_.size();
written = fwrite(&(deltas_[0]), sizeof(deltas_[0]), deltas_.size(),
file.get());
if (written != deltas_.size())
return false;
- base::MD5Update(&context, &(deltas_[0]), deltas_bytes);
+ base::MD5Update(&context,
+ base::StringPiece(
+ reinterpret_cast<const char*>(&(deltas_[0])),
+ deltas_bytes));
base::MD5Digest digest;
base::MD5Final(&digest, &context);
diff --git a/chrome/browser/safe_browsing/prefix_set_unittest.cc b/chrome/browser/safe_browsing/prefix_set_unittest.cc
index 22d26d8..1ee2dac 100644
--- a/chrome/browser/safe_browsing/prefix_set_unittest.cc
+++ b/chrome/browser/safe_browsing/prefix_set_unittest.cc
@@ -113,7 +113,7 @@ class PrefixSetTest : public PlatformTest {
char buf[1024];
size_t nitems = std::min(payload_size - digested_size, sizeof(buf));
ASSERT_EQ(nitems, fread(buf, 1, nitems, fp));
- base::MD5Update(&context, &buf, nitems);
+ base::MD5Update(&context, base::StringPiece(buf, nitems));
digested_size += nitems;
}
ASSERT_EQ(digested_size, payload_size);
diff --git a/chrome/browser/safe_browsing/safe_browsing_store_file.cc b/chrome/browser/safe_browsing/safe_browsing_store_file.cc
index 110fa54..af3e3df 100644
--- a/chrome/browser/safe_browsing/safe_browsing_store_file.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_store_file.cc
@@ -58,8 +58,11 @@ bool ReadArray(T* ptr, size_t nmemb, FILE* fp, base::MD5Context* context) {
if (ret != nmemb)
return false;
- if (context)
- base::MD5Update(context, ptr, sizeof(T) * nmemb);
+ if (context) {
+ base::MD5Update(context,
+ base::StringPiece(reinterpret_cast<char*>(ptr),
+ sizeof(T) * nmemb));
+ }
return true;
}
@@ -73,8 +76,11 @@ bool WriteArray(const T* ptr, size_t nmemb, FILE* fp,
if (ret != nmemb)
return false;
- if (context)
- base::MD5Update(context, ptr, sizeof(T) * nmemb);
+ if (context) {
+ base::MD5Update(context,
+ base::StringPiece(reinterpret_cast<const char*>(ptr),
+ sizeof(T) * nmemb));
+ }
return true;
}
diff --git a/chrome/browser/sync/util/user_settings.cc b/chrome/browser/sync/util/user_settings.cc
index df8ab6b..6ce150e 100644
--- a/chrome/browser/sync/util/user_settings.cc
+++ b/chrome/browser/sync/util/user_settings.cc
@@ -357,8 +357,8 @@ void UserSettings::StoreHashedPassword(const string& email,
const string salt = APEncode(string(binary_salt, sizeof(binary_salt)));
base::MD5Context md5_context;
base::MD5Init(&md5_context);
- base::MD5Update(&md5_context, salt.data(), salt.size());
- base::MD5Update(&md5_context, password.data(), password.size());
+ base::MD5Update(&md5_context, salt);
+ base::MD5Update(&md5_context, password);
base::MD5Digest md5_digest;
base::MD5Final(&md5_digest, &md5_context);
@@ -420,8 +420,8 @@ bool UserSettings::VerifyAgainstStoredHash(const string& email,
return false;
base::MD5Context md5_context;
base::MD5Init(&md5_context);
- base::MD5Update(&md5_context, salt.data(), salt.size());
- base::MD5Update(&md5_context, password.data(), password.size());
+ base::MD5Update(&md5_context, salt);
+ base::MD5Update(&md5_context, password);
base::MD5Digest md5_digest;
base::MD5Final(&md5_digest, &md5_context);
return hash == GetHashFromDigest(md5_digest);
diff --git a/chrome/common/metrics_helpers.cc b/chrome/common/metrics_helpers.cc
index c7aef5b..0441862 100644
--- a/chrome/common/metrics_helpers.cc
+++ b/chrome/common/metrics_helpers.cc
@@ -177,7 +177,7 @@ int MetricsLogBase::GetElapsedSeconds() {
std::string MetricsLogBase::CreateHash(const std::string& value) {
base::MD5Context ctx;
base::MD5Init(&ctx);
- base::MD5Update(&ctx, value.data(), value.length());
+ base::MD5Update(&ctx, value);
base::MD5Digest digest;
base::MD5Final(&digest, &ctx);
diff --git a/chrome/common/visitedlink_common.cc b/chrome/common/visitedlink_common.cc
index 7fb254e..7c21054 100644
--- a/chrome/common/visitedlink_common.cc
+++ b/chrome/common/visitedlink_common.cc
@@ -81,8 +81,9 @@ VisitedLinkCommon::Fingerprint VisitedLinkCommon::ComputeURLFingerprint(
base::MD5Context ctx;
base::MD5Init(&ctx);
- base::MD5Update(&ctx, salt, LINK_SALT_LENGTH * sizeof(uint8));
- base::MD5Update(&ctx, canonical_url, url_len * sizeof(char));
+ base::MD5Update(&ctx, base::StringPiece(reinterpret_cast<const char*>(salt),
+ LINK_SALT_LENGTH));
+ base::MD5Update(&ctx, base::StringPiece(canonical_url, url_len));
base::MD5Digest digest;
base::MD5Final(&digest, &ctx);
diff --git a/media/test/ffmpeg_tests/ffmpeg_tests.cc b/media/test/ffmpeg_tests/ffmpeg_tests.cc
index 8c0bc7c..e91ca00 100644
--- a/media/test/ffmpeg_tests/ffmpeg_tests.cc
+++ b/media/test/ffmpeg_tests/ffmpeg_tests.cc
@@ -316,8 +316,12 @@ int main(int argc, const char** argv) {
if (hash_djb2) {
hash_value = DJB2Hash(u8_samples, size_out, hash_value);
}
- if (hash_md5)
- base::MD5Update(&ctx, u8_samples, size_out);
+ if (hash_md5) {
+ base::MD5Update(
+ &ctx,
+ base::StringPiece(
+ reinterpret_cast<const char*>(u8_samples), size_out));
+ }
}
} else if (target_codec == AVMEDIA_TYPE_VIDEO) {
int got_picture = 0;
@@ -377,8 +381,10 @@ int main(int argc, const char** argv) {
}
if (hash_md5) {
for (size_t i = 0; i < copy_lines; ++i) {
- base::MD5Update(&ctx, reinterpret_cast<const uint8*>(source),
- bytes_per_line);
+ base::MD5Update(
+ &ctx,
+ base::StringPiece(reinterpret_cast<const char*>(source),
+ bytes_per_line));
source += source_stride;
}
}
@@ -497,4 +503,3 @@ int main(int argc, const char** argv) {
CommandLine::Reset();
return 0;
}
-
diff --git a/media/tools/media_bench/media_bench.cc b/media/tools/media_bench/media_bench.cc
index 1d3872a..66c3536e 100644
--- a/media/tools/media_bench/media_bench.cc
+++ b/media/tools/media_bench/media_bench.cc
@@ -426,8 +426,12 @@ int main(int argc, const char** argv) {
if (hash_djb2) {
hash_value = DJB2Hash(u8_samples, size_out, hash_value);
}
- if (hash_md5)
- base::MD5Update(&ctx, u8_samples, size_out);
+ if (hash_md5) {
+ base::MD5Update(
+ &ctx,
+ base::StringPiece(reinterpret_cast<const char*>(u8_samples),
+ size_out));
+ }
}
} else if (target_codec == AVMEDIA_TYPE_VIDEO) {
int got_picture = 0;
@@ -487,8 +491,10 @@ int main(int argc, const char** argv) {
}
if (hash_md5) {
for (size_t i = 0; i < copy_lines; ++i) {
- base::MD5Update(&ctx, reinterpret_cast<const uint8*>(source),
- bytes_per_line);
+ base::MD5Update(
+ &ctx,
+ base::StringPiece(reinterpret_cast<const char*>(source),
+ bytes_per_line));
source += source_stride;
}
}
diff --git a/net/http/http_vary_data.cc b/net/http/http_vary_data.cc
index cb41a36..882dc78 100644
--- a/net/http/http_vary_data.cc
+++ b/net/http/http_vary_data.cc
@@ -120,7 +120,7 @@ void HttpVaryData::AddField(const HttpRequestInfo& request_info,
// For example, "foo: 12\nbar: 3" looks like "foo: 1\nbar: 23" otherwise.
request_value.append(1, '\n');
- base::MD5Update(ctx, request_value.data(), request_value.size());
+ base::MD5Update(ctx, request_value);
}
} // namespace net