Merge "AAPT2: Fix order-of-destruction crash" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
62b713ed73
@@ -377,8 +377,8 @@ bool ResourceFileFlattener::LinkAndVersionXmlFile(ResourceTable* table, FileOper
|
||||
versioned_file_desc.config.sdkVersion = (uint16_t)sdk_level;
|
||||
|
||||
FileOperation new_file_op;
|
||||
new_file_op.xml_to_flatten =
|
||||
util::make_unique<xml::XmlResource>(versioned_file_desc, doc->root->Clone());
|
||||
new_file_op.xml_to_flatten = util::make_unique<xml::XmlResource>(
|
||||
versioned_file_desc, StringPool{}, doc->root->Clone());
|
||||
new_file_op.config = versioned_file_desc.config;
|
||||
new_file_op.entry = file_op->entry;
|
||||
new_file_op.dst_path =
|
||||
|
||||
@@ -224,7 +224,8 @@ std::unique_ptr<XmlResource> Inflate(std::istream* in, IDiagnostics* diag, const
|
||||
|
||||
XML_ParserFree(parser);
|
||||
if (stack.root) {
|
||||
return util::make_unique<XmlResource>(ResourceFile{{}, {}, source}, std::move(stack.root));
|
||||
return util::make_unique<XmlResource>(ResourceFile{{}, {}, source}, StringPool{},
|
||||
std::move(stack.root));
|
||||
}
|
||||
return {};
|
||||
}
|
||||
@@ -357,7 +358,7 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos
|
||||
}
|
||||
}
|
||||
}
|
||||
return util::make_unique<XmlResource>(ResourceFile{}, std::move(root), std::move(string_pool));
|
||||
return util::make_unique<XmlResource>(ResourceFile{}, std::move(string_pool), std::move(root));
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Namespace::Clone() {
|
||||
|
||||
@@ -128,8 +128,13 @@ class Text : public BaseNode<Text> {
|
||||
class XmlResource {
|
||||
public:
|
||||
ResourceFile file;
|
||||
std::unique_ptr<xml::Node> root;
|
||||
|
||||
// StringPool must come before the xml::Node. Destructors are called in reverse order, and
|
||||
// the xml::Node may have StringPool references that need to be destroyed before the StringPool
|
||||
// is destroyed.
|
||||
StringPool string_pool;
|
||||
|
||||
std::unique_ptr<xml::Node> root;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user