Index: extensions/browser/value_store/value_store_unittest.cc |
diff --git a/extensions/browser/value_store/value_store_unittest.cc b/extensions/browser/value_store/value_store_unittest.cc |
index 8c5f7aec06c6ff23f5291c323d1750229f4aae96..1a0d2a00d1e779876439d1b9322af57322e6cb7e 100644 |
--- a/extensions/browser/value_store/value_store_unittest.cc |
+++ b/extensions/browser/value_store/value_store_unittest.cc |
@@ -4,6 +4,8 @@ |
#include "extensions/browser/value_store/value_store_unittest.h" |
+#include <utility> |
+ |
#include "base/json/json_writer.h" |
#include "base/memory/linked_ptr.h" |
#include "base/values.h" |
@@ -156,13 +158,13 @@ ValueStoreTest::ValueStoreTest() |
set13_.insert(list13_.begin(), list13_.end()); |
set123_.insert(list123_.begin(), list123_.end()); |
- dict1_->Set(key1_, val1_->DeepCopy()); |
- dict3_->Set(key3_, val3_->DeepCopy()); |
- dict12_->Set(key1_, val1_->DeepCopy()); |
- dict12_->Set(key2_, val2_->DeepCopy()); |
- dict123_->Set(key1_, val1_->DeepCopy()); |
- dict123_->Set(key2_, val2_->DeepCopy()); |
- dict123_->Set(key3_, val3_->DeepCopy()); |
+ dict1_->Set(key1_, val1_->CreateDeepCopy()); |
+ dict3_->Set(key3_, val3_->CreateDeepCopy()); |
+ dict12_->Set(key1_, val1_->CreateDeepCopy()); |
+ dict12_->Set(key2_, val2_->CreateDeepCopy()); |
+ dict123_->Set(key1_, val1_->CreateDeepCopy()); |
+ dict123_->Set(key2_, val2_->CreateDeepCopy()); |
+ dict123_->Set(key3_, val3_->CreateDeepCopy()); |
} |
ValueStoreTest::~ValueStoreTest() {} |
@@ -187,7 +189,8 @@ TEST_P(ValueStoreTest, GetWhenEmpty) { |
TEST_P(ValueStoreTest, GetWithSingleValue) { |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, |
changes, storage_->Set(DEFAULTS, key1_, *val1_)); |
} |
@@ -203,8 +206,10 @@ TEST_P(ValueStoreTest, GetWithSingleValue) { |
TEST_P(ValueStoreTest, GetWithMultipleValues) { |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
- changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
} |
@@ -228,7 +233,8 @@ TEST_P(ValueStoreTest, RemoveWithSingleValue) { |
storage_->Set(DEFAULTS, *dict1_); |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); |
} |
@@ -243,7 +249,8 @@ TEST_P(ValueStoreTest, RemoveWithMultipleValues) { |
storage_->Set(DEFAULTS, *dict123_); |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_)); |
} |
@@ -258,8 +265,10 @@ TEST_P(ValueStoreTest, RemoveWithMultipleValues) { |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
- changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
+ changes.push_back( |
+ ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); |
} |
@@ -277,9 +286,10 @@ TEST_P(ValueStoreTest, SetWhenOverwriting) { |
storage_->Set(DEFAULTS, key1_, *val2_); |
{ |
ValueStoreChangeList changes; |
+ changes.push_back(ValueStoreChange(key1_, val2_->CreateDeepCopy(), |
+ val1_->CreateDeepCopy())); |
changes.push_back( |
- ValueStoreChange(key1_, val2_->DeepCopy(), val1_->DeepCopy())); |
- changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); |
+ ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
} |
@@ -306,8 +316,10 @@ TEST_P(ValueStoreTest, ClearWhenNotEmpty) { |
storage_->Set(DEFAULTS, *dict12_); |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
- changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
+ changes.push_back( |
+ ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
} |
@@ -325,14 +337,14 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
std::vector<std::string> dot_list; |
dot_list.push_back(dot_key); |
base::DictionaryValue dot_dict; |
- dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); |
+ dot_dict.SetWithoutPathExpansion(dot_key, dot_value.CreateDeepCopy()); |
EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); |
{ |
ValueStoreChangeList changes; |
changes.push_back( |
- ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); |
+ ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, |
changes, storage_->Set(DEFAULTS, dot_key, dot_value)); |
} |
@@ -344,7 +356,7 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
{ |
ValueStoreChangeList changes; |
changes.push_back( |
- ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); |
+ ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key)); |
} |
EXPECT_PRED_FORMAT2(ChangesEq, |
@@ -352,7 +364,7 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
{ |
ValueStoreChangeList changes; |
changes.push_back( |
- ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); |
+ ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict)); |
} |
@@ -362,7 +374,7 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
{ |
ValueStoreChangeList changes; |
changes.push_back( |
- ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); |
+ ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list)); |
} |
@@ -372,14 +384,15 @@ TEST_P(ValueStoreTest, DotsInKeyNames) { |
TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) { |
base::DictionaryValue outer_dict; |
- base::DictionaryValue* inner_dict = new base::DictionaryValue(); |
- outer_dict.Set("foo", inner_dict); |
+ std::unique_ptr<base::DictionaryValue> inner_dict( |
+ new base::DictionaryValue()); |
+ outer_dict.Set("foo", std::move(inner_dict)); |
inner_dict->SetString("bar", "baz"); |
Devlin
2016/05/03 16:55:05
UAF (was already a conceptual problem, but now thi
dcheng
2016/05/03 17:16:26
Done. This was "safe" before but is now unsafe.
|
{ |
ValueStoreChangeList changes; |
changes.push_back( |
- ValueStoreChange("foo", NULL, inner_dict->DeepCopy())); |
+ ValueStoreChange("foo", nullptr, inner_dict->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, |
changes, storage_->Set(DEFAULTS, outer_dict)); |
} |
@@ -401,63 +414,72 @@ TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { |
ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_)); |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange( |
- key1_, val1_->DeepCopy(), val2_->DeepCopy())); |
+ changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(), |
+ val2_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, |
changes, storage_->Set(DEFAULTS, key1_, *val2_)); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); |
EXPECT_PRED_FORMAT2(ChangesEq, |
ValueStoreChangeList(), storage_->Remove(key1_)); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, |
changes, storage_->Set(DEFAULTS, key1_, *val1_)); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); |
- changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
EXPECT_PRED_FORMAT2(ChangesEq, |
ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_)); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key3_, NULL, val3_->DeepCopy())); |
+ changes.push_back( |
+ ValueStoreChange(key3_, nullptr, val3_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_)); |
} |
{ |
base::DictionaryValue to_set; |
- to_set.Set(key1_, val2_->DeepCopy()); |
- to_set.Set(key2_, val2_->DeepCopy()); |
- to_set.Set("asdf", val1_->DeepCopy()); |
- to_set.Set("qwerty", val3_->DeepCopy()); |
+ to_set.Set(key1_, val2_->CreateDeepCopy()); |
+ to_set.Set(key2_, val2_->CreateDeepCopy()); |
+ to_set.Set("asdf", val1_->CreateDeepCopy()); |
+ to_set.Set("qwerty", val3_->CreateDeepCopy()); |
ValueStoreChangeList changes; |
+ changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(), |
+ val2_->CreateDeepCopy())); |
changes.push_back( |
- ValueStoreChange(key1_, val1_->DeepCopy(), val2_->DeepCopy())); |
- changes.push_back(ValueStoreChange("asdf", NULL, val1_->DeepCopy())); |
+ ValueStoreChange("asdf", nullptr, val1_->CreateDeepCopy())); |
changes.push_back( |
- ValueStoreChange("qwerty", NULL, val3_->DeepCopy())); |
+ ValueStoreChange("qwerty", nullptr, val3_->CreateDeepCopy())); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set)); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); |
- changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr)); |
+ changes.push_back( |
+ ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); |
} |
{ |
@@ -466,14 +488,16 @@ TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { |
to_remove.push_back("asdf"); |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange("asdf", val1_->DeepCopy(), NULL)); |
+ changes.push_back( |
+ ValueStoreChange("asdf", val1_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove)); |
} |
{ |
ValueStoreChangeList changes; |
- changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); |
changes.push_back( |
- ValueStoreChange("qwerty", val3_->DeepCopy(), NULL)); |
+ ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr)); |
+ changes.push_back( |
+ ValueStoreChange("qwerty", val3_->CreateDeepCopy(), nullptr)); |
EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
} |