summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/aapt2/cmd/Link.cpp4
-rw-r--r--tools/aapt2/xml/XmlDom.cpp5
-rw-r--r--tools/aapt2/xml/XmlDom.h7
3 files changed, 11 insertions, 5 deletions
diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp
index 6e0809e62450..9fb087c23574 100644
--- a/tools/aapt2/cmd/Link.cpp
+++ b/tools/aapt2/cmd/Link.cpp
@@ -376,8 +376,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 =
diff --git a/tools/aapt2/xml/XmlDom.cpp b/tools/aapt2/xml/XmlDom.cpp
index 4a278f632a4a..60551901fe8d 100644
--- a/tools/aapt2/xml/XmlDom.cpp
+++ b/tools/aapt2/xml/XmlDom.cpp
@@ -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() {
diff --git a/tools/aapt2/xml/XmlDom.h b/tools/aapt2/xml/XmlDom.h
index f1d0953c5494..6950c307abf3 100644
--- a/tools/aapt2/xml/XmlDom.h
+++ b/tools/aapt2/xml/XmlDom.h
@@ -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;
};
/**