| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/base64.h" | 5 #include "base/base64.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
| 10 #include "base/metrics/sparse_histogram.h" | 10 #include "base/metrics/sparse_histogram.h" |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 // Update the iterator map, which means that we have merged one hash | 412 // Update the iterator map, which means that we have merged one hash |
| 413 // prefix of size |next_size_for_old| from the old store. | 413 // prefix of size |next_size_for_old| from the old store. |
| 414 old_iterator_map[next_smallest_prefix_size] += next_smallest_prefix_size; | 414 old_iterator_map[next_smallest_prefix_size] += next_smallest_prefix_size; |
| 415 | 415 |
| 416 if (!raw_removals || removals_iter == raw_removals->end() || | 416 if (!raw_removals || removals_iter == raw_removals->end() || |
| 417 *removals_iter != total_picked_from_old) { | 417 *removals_iter != total_picked_from_old) { |
| 418 // Append the smallest hash to the appropriate list. | 418 // Append the smallest hash to the appropriate list. |
| 419 hash_prefix_map_[next_smallest_prefix_size] += next_smallest_prefix_old; | 419 hash_prefix_map_[next_smallest_prefix_size] += next_smallest_prefix_old; |
| 420 | 420 |
| 421 if (calculate_checksum) { | 421 if (calculate_checksum) { |
| 422 checksum_ctx->Update(string_as_array(&next_smallest_prefix_old), | 422 checksum_ctx->Update(base::string_as_array(&next_smallest_prefix_old), |
| 423 next_smallest_prefix_size); | 423 next_smallest_prefix_size); |
| 424 } | 424 } |
| 425 } else { | 425 } else { |
| 426 // Element not added to new map. Move the removals iterator forward. | 426 // Element not added to new map. Move the removals iterator forward. |
| 427 removals_iter++; | 427 removals_iter++; |
| 428 } | 428 } |
| 429 | 429 |
| 430 total_picked_from_old++; | 430 total_picked_from_old++; |
| 431 | 431 |
| 432 // Find the next smallest unmerged element in the old store's map. | 432 // Find the next smallest unmerged element in the old store's map. |
| 433 old_has_unmerged = GetNextSmallestUnmergedPrefix( | 433 old_has_unmerged = GetNextSmallestUnmergedPrefix( |
| 434 old_prefixes_map, old_iterator_map, &next_smallest_prefix_old); | 434 old_prefixes_map, old_iterator_map, &next_smallest_prefix_old); |
| 435 } else { | 435 } else { |
| 436 next_smallest_prefix_size = next_smallest_prefix_additions.size(); | 436 next_smallest_prefix_size = next_smallest_prefix_additions.size(); |
| 437 | 437 |
| 438 // Append the smallest hash to the appropriate list. | 438 // Append the smallest hash to the appropriate list. |
| 439 hash_prefix_map_[next_smallest_prefix_size] += | 439 hash_prefix_map_[next_smallest_prefix_size] += |
| 440 next_smallest_prefix_additions; | 440 next_smallest_prefix_additions; |
| 441 | 441 |
| 442 if (calculate_checksum) { | 442 if (calculate_checksum) { |
| 443 checksum_ctx->Update(string_as_array(&next_smallest_prefix_additions), | 443 checksum_ctx->Update( |
| 444 next_smallest_prefix_size); | 444 base::string_as_array(&next_smallest_prefix_additions), |
| 445 next_smallest_prefix_size); |
| 445 } | 446 } |
| 446 | 447 |
| 447 // Update the iterator map, which means that we have merged one hash | 448 // Update the iterator map, which means that we have merged one hash |
| 448 // prefix of size |next_smallest_prefix_size| from the update. | 449 // prefix of size |next_smallest_prefix_size| from the update. |
| 449 additions_iterator_map[next_smallest_prefix_size] += | 450 additions_iterator_map[next_smallest_prefix_size] += |
| 450 next_smallest_prefix_size; | 451 next_smallest_prefix_size; |
| 451 | 452 |
| 452 // Find the next smallest unmerged element in the additions map. | 453 // Find the next smallest unmerged element in the additions map. |
| 453 additions_has_unmerged = | 454 additions_has_unmerged = |
| 454 GetNextSmallestUnmergedPrefix(additions_map, additions_iterator_map, | 455 GetNextSmallestUnmergedPrefix(additions_map, additions_iterator_map, |
| 455 &next_smallest_prefix_additions); | 456 &next_smallest_prefix_additions); |
| 456 } | 457 } |
| 457 } | 458 } |
| 458 | 459 |
| 459 if (raw_removals && removals_iter != raw_removals->end()) { | 460 if (raw_removals && removals_iter != raw_removals->end()) { |
| 460 return REMOVALS_INDEX_TOO_LARGE_FAILURE; | 461 return REMOVALS_INDEX_TOO_LARGE_FAILURE; |
| 461 } | 462 } |
| 462 | 463 |
| 463 if (calculate_checksum) { | 464 if (calculate_checksum) { |
| 464 std::string checksum(crypto::kSHA256Length, 0); | 465 std::string checksum(crypto::kSHA256Length, 0); |
| 465 checksum_ctx->Finish(string_as_array(&checksum), checksum.size()); | 466 checksum_ctx->Finish(base::string_as_array(&checksum), checksum.size()); |
| 466 if (checksum != expected_checksum) { | 467 if (checksum != expected_checksum) { |
| 467 std::string checksum_base64, expected_checksum_base64; | 468 std::string checksum_base64, expected_checksum_base64; |
| 468 base::Base64Encode(checksum, &checksum_base64); | 469 base::Base64Encode(checksum, &checksum_base64); |
| 469 base::Base64Encode(expected_checksum, &expected_checksum_base64); | 470 base::Base64Encode(expected_checksum, &expected_checksum_base64); |
| 470 DVLOG(1) << "Checksum failed: calculated: " << checksum_base64 | 471 DVLOG(1) << "Checksum failed: calculated: " << checksum_base64 |
| 471 << "expected: " << expected_checksum_base64; | 472 << "expected: " << expected_checksum_base64; |
| 472 return CHECKSUM_MISMATCH_FAILURE; | 473 return CHECKSUM_MISMATCH_FAILURE; |
| 473 } | 474 } |
| 474 } | 475 } |
| 475 | 476 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 if (result == 0) { | 594 if (result == 0) { |
| 594 return true; | 595 return true; |
| 595 } else if (result < 0) { | 596 } else if (result < 0) { |
| 596 return HashPrefixMatches(hash_prefix, begin, mid); | 597 return HashPrefixMatches(hash_prefix, begin, mid); |
| 597 } else { | 598 } else { |
| 598 return HashPrefixMatches(hash_prefix, mid + prefix_size, end); | 599 return HashPrefixMatches(hash_prefix, mid + prefix_size, end); |
| 599 } | 600 } |
| 600 } | 601 } |
| 601 | 602 |
| 602 } // namespace safe_browsing | 603 } // namespace safe_browsing |
| OLD | NEW |