Index: base/trace_event/trace_event_argument.cc |
diff --git a/base/trace_event/trace_event_argument.cc b/base/trace_event/trace_event_argument.cc |
index db702b6231e5249c9526d27ac439450c732e39a6..646b1f2168794fca6ec2108b085b1014a2205830 100644 |
--- a/base/trace_event/trace_event_argument.cc |
+++ b/base/trace_event/trace_event_argument.cc |
@@ -289,7 +289,7 @@ void TracedValue::SetBaseValueWithCopiedName(base::StringPiece name, |
value.GetAsList(&list_value); |
BeginArrayWithCopiedName(name); |
for (const auto& base_value : *list_value) |
- AppendBaseValue(*base_value); |
+ AppendBaseValue(base_value); |
EndArray(); |
} break; |
} |
@@ -343,7 +343,7 @@ void TracedValue::AppendBaseValue(const base::Value& value) { |
value.GetAsList(&list_value); |
BeginArray(); |
for (const auto& base_value : *list_value) |
- AppendBaseValue(*base_value); |
+ AppendBaseValue(base_value); |
EndArray(); |
} break; |
} |
@@ -369,9 +369,11 @@ std::unique_ptr<base::Value> TracedValue::ToBaseValue() const { |
cur_dict = new_dict; |
} else { |
cur_list->Append(WrapUnique(new_dict)); |
+ // |new_dict| is invalidated at this point, so |cur_dict| needs to be |
+ // reset. |
+ cur_list->GetDictionary(cur_list->GetSize() - 1, &cur_dict); |
stack.push_back(cur_list); |
cur_list = nullptr; |
- cur_dict = new_dict; |
} |
} break; |
@@ -396,7 +398,8 @@ std::unique_ptr<base::Value> TracedValue::ToBaseValue() const { |
} else { |
cur_list->Append(WrapUnique(new_list)); |
stack.push_back(cur_list); |
- cur_list = new_list; |
+ // |cur_list| is invalidated at this point, so it needs to be reset. |
+ cur_list->GetList(cur_list->GetSize() - 1, &cur_list); |
} |
} break; |