Index: base/values.cc |
diff --git a/base/values.cc b/base/values.cc |
index 5cc0d693bdd11c12e60f14f8921bec3cd303e4da..9aef2ec67005a7608405beaf2bafcdb496bc06f7 100644 |
--- a/base/values.cc |
+++ b/base/values.cc |
@@ -124,6 +124,10 @@ Value::Value(Type type) : type_(type) { |
case Type::LIST: |
list_.Init(); |
return; |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): Remove. |
+ CHECK(false); |
+ return; |
} |
} |
@@ -200,6 +204,7 @@ Value& Value::operator=(Value&& that) { |
Value::~Value() { |
InternalCleanup(); |
+ type_ = Type::DELETED; |
} |
// static |
@@ -442,6 +447,10 @@ bool Value::Equals(const Value* other) const { |
return lhs->Equals(rhs.get()); |
}); |
} |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): This means a use-after-free. |
+ CHECK(false); |
+ return false; |
} |
NOTREACHED(); |
@@ -503,6 +512,10 @@ void Value::InternalCopyConstructFrom(const Value& that) { |
case Type::LIST: |
list_.Init(std::move(*that.CreateDeepCopy()->list_)); |
return; |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): This means |that| is used after free. |
+ CHECK(false); |
+ return; |
} |
} |
@@ -529,6 +542,10 @@ void Value::InternalMoveConstructFrom(Value&& that) { |
case Type::LIST: |
list_.InitFromMove(std::move(that.list_)); |
return; |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): This means |that| is used after free. |
+ CHECK(false); |
+ return; |
} |
} |
@@ -559,6 +576,10 @@ void Value::InternalCopyAssignFromSameType(const Value& that) { |
case Type::LIST: |
*list_ = std::move(*that.CreateDeepCopy()->list_); |
return; |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): This means |that| is used after free. |
+ CHECK(false); |
+ return; |
} |
} |
@@ -585,6 +606,10 @@ void Value::InternalMoveAssignFromSameType(Value&& that) { |
case Type::LIST: |
*list_ = std::move(*that.list_); |
return; |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): This means |that| is used after free. |
+ CHECK(false); |
+ return; |
} |
} |
@@ -609,6 +634,10 @@ void Value::InternalCleanup() { |
case Type::LIST: |
list_.Destroy(); |
return; |
+ case Type::DELETED: |
+ // TODO(crbug.com/697817): This means a use-after-free. |
+ CHECK(false); |
+ return; |
} |
} |