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

Side by Side Diff: chrome/browser/safe_browsing/prefix_set.cc

Issue 7466003: MD5Update function uses StringPiece instead of raw buffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove line from license. Created 9 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/safe_browsing/prefix_set.h" 5 #include "chrome/browser/safe_browsing/prefix_set.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <math.h> 8 #include <math.h>
9 9
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 185
186 // Check for bogus sizes before allocating any space. 186 // Check for bogus sizes before allocating any space.
187 const size_t expected_bytes = 187 const size_t expected_bytes =
188 sizeof(header) + index_bytes + deltas_bytes + sizeof(MD5Digest); 188 sizeof(header) + index_bytes + deltas_bytes + sizeof(MD5Digest);
189 if (static_cast<int64>(expected_bytes) != size_64) 189 if (static_cast<int64>(expected_bytes) != size_64)
190 return NULL; 190 return NULL;
191 191
192 // The file looks valid, start building the digest. 192 // The file looks valid, start building the digest.
193 base::MD5Context context; 193 base::MD5Context context;
194 base::MD5Init(&context); 194 base::MD5Init(&context);
195 base::MD5Update(&context, &header, sizeof(header)); 195 base::MD5Update(&context, base::StringPiece(reinterpret_cast<char*>(&header),
196 sizeof(header)));
196 197
197 // Read the index vector. Herb Sutter indicates that vectors are 198 // Read the index vector. Herb Sutter indicates that vectors are
198 // guaranteed to be contiuguous, so reading to where element 0 lives 199 // guaranteed to be contiuguous, so reading to where element 0 lives
199 // is valid. 200 // is valid.
200 index.resize(header.index_size); 201 index.resize(header.index_size);
201 read = fread(&(index[0]), sizeof(index[0]), index.size(), file.get()); 202 read = fread(&(index[0]), sizeof(index[0]), index.size(), file.get());
202 if (read != index.size()) 203 if (read != index.size())
203 return NULL; 204 return NULL;
204 base::MD5Update(&context, &(index[0]), index_bytes); 205 base::MD5Update(&context,
206 base::StringPiece(reinterpret_cast<char*>(&(index[0])),
207 index_bytes));
205 208
206 // Read vector of deltas. 209 // Read vector of deltas.
207 deltas.resize(header.deltas_size); 210 deltas.resize(header.deltas_size);
208 read = fread(&(deltas[0]), sizeof(deltas[0]), deltas.size(), file.get()); 211 read = fread(&(deltas[0]), sizeof(deltas[0]), deltas.size(), file.get());
209 if (read != deltas.size()) 212 if (read != deltas.size())
210 return NULL; 213 return NULL;
211 base::MD5Update(&context, &(deltas[0]), deltas_bytes); 214 base::MD5Update(&context,
215 base::StringPiece(reinterpret_cast<char*>(&(deltas[0])),
216 deltas_bytes));
212 217
213 base::MD5Digest calculated_digest; 218 base::MD5Digest calculated_digest;
214 base::MD5Final(&calculated_digest, &context); 219 base::MD5Final(&calculated_digest, &context);
215 220
216 base::MD5Digest file_digest; 221 base::MD5Digest file_digest;
217 read = fread(&file_digest, sizeof(file_digest), 1, file.get()); 222 read = fread(&file_digest, sizeof(file_digest), 1, file.get());
218 if (read != 1) 223 if (read != 1)
219 return NULL; 224 return NULL;
220 225
221 if (0 != memcmp(&file_digest, &calculated_digest, sizeof(file_digest))) 226 if (0 != memcmp(&file_digest, &calculated_digest, sizeof(file_digest)))
(...skipping 22 matching lines...) Expand all
244 return false; 249 return false;
245 250
246 base::MD5Context context; 251 base::MD5Context context;
247 base::MD5Init(&context); 252 base::MD5Init(&context);
248 253
249 // TODO(shess): The I/O code in safe_browsing_store_file.cc would 254 // TODO(shess): The I/O code in safe_browsing_store_file.cc would
250 // sure be useful about now. 255 // sure be useful about now.
251 size_t written = fwrite(&header, sizeof(header), 1, file.get()); 256 size_t written = fwrite(&header, sizeof(header), 1, file.get());
252 if (written != 1) 257 if (written != 1)
253 return false; 258 return false;
254 base::MD5Update(&context, &header, sizeof(header)); 259 base::MD5Update(&context, base::StringPiece(reinterpret_cast<char*>(&header),
260 sizeof(header)));
255 261
256 // As for reads, the standard guarantees the ability to access the 262 // As for reads, the standard guarantees the ability to access the
257 // contents of the vector by a pointer to an element. 263 // contents of the vector by a pointer to an element.
258 const size_t index_bytes = sizeof(index_[0]) * index_.size(); 264 const size_t index_bytes = sizeof(index_[0]) * index_.size();
259 written = fwrite(&(index_[0]), sizeof(index_[0]), index_.size(), file.get()); 265 written = fwrite(&(index_[0]), sizeof(index_[0]), index_.size(), file.get());
260 if (written != index_.size()) 266 if (written != index_.size())
261 return false; 267 return false;
262 base::MD5Update(&context, &(index_[0]), index_bytes); 268 base::MD5Update(&context,
269 base::StringPiece(reinterpret_cast<const char*>(&(index_[0])),
270 index_bytes));
263 271
264 const size_t deltas_bytes = sizeof(deltas_[0]) * deltas_.size(); 272 const size_t deltas_bytes = sizeof(deltas_[0]) * deltas_.size();
265 written = fwrite(&(deltas_[0]), sizeof(deltas_[0]), deltas_.size(), 273 written = fwrite(&(deltas_[0]), sizeof(deltas_[0]), deltas_.size(),
266 file.get()); 274 file.get());
267 if (written != deltas_.size()) 275 if (written != deltas_.size())
268 return false; 276 return false;
269 base::MD5Update(&context, &(deltas_[0]), deltas_bytes); 277 base::MD5Update(&context,
278 base::StringPiece(
279 reinterpret_cast<const char*>(&(deltas_[0])),
280 deltas_bytes));
270 281
271 base::MD5Digest digest; 282 base::MD5Digest digest;
272 base::MD5Final(&digest, &context); 283 base::MD5Final(&digest, &context);
273 written = fwrite(&digest, sizeof(digest), 1, file.get()); 284 written = fwrite(&digest, sizeof(digest), 1, file.get());
274 if (written != 1) 285 if (written != 1)
275 return false; 286 return false;
276 287
277 // TODO(shess): Can this code check that the close was successful? 288 // TODO(shess): Can this code check that the close was successful?
278 file.reset(); 289 file.reset();
279 290
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 } 351 }
341 352
342 for (size_t di = 0; di < deltas_.size(); ++di) { 353 for (size_t di = 0; di < deltas_.size(); ++di) {
343 checksum ^= static_cast<uint32>(deltas_[di]); 354 checksum ^= static_cast<uint32>(deltas_[di]);
344 } 355 }
345 356
346 return checksum == checksum_; 357 return checksum == checksum_;
347 } 358 }
348 359
349 } // namespace safe_browsing 360 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.cc ('k') | chrome/browser/safe_browsing/prefix_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698