summaryrefslogtreecommitdiff
path: root/tools/aapt2/ResourceParser.cpp
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2019-05-28 16:30:17 -0700
committer Ryan Mitchell <rtmitchell@google.com> 2019-05-28 23:44:13 +0000
commitfc3874ac821b63b07fef089667e4afe3c4528aa5 (patch)
treeff2656b1b6d69ed6d4cdd4065c75581d92471fda /tools/aapt2/ResourceParser.cpp
parent9c6483c1eb24e90c86fdc200b1f0bfd97cde2669 (diff)
Empty attribute values in styles should be strings
In aapt1, if you specified the value of an attribute in a style as an empty string (eg. <item name="my_attr"></item>), the encoded value would be an empty string. In aapt2 currently, @null is encoded instead. This change restores aapt1 behavior. Use @null explicitly if the desired value is to be @null. Bug: 133450400 Test: manual comparison of APK created by aapt1 and aapt2 <attr name="my_attr" format="string|reference" /> <style name="MyName"> <item name="my_attr"></item> </style> $ aapt p -M AndroidManifest.xml -F out1.apk -S res -f $ aapt2 compile --dir res-o compiled.flata $ aapt2 link --manifest AndroidManifest.xml -o out2.apk compiled.flata $ aapt2 dump out2.apk Change-Id: I8aa0ba30379dac0b1229da525abbc5482f40114b
Diffstat (limited to 'tools/aapt2/ResourceParser.cpp')
-rw-r--r--tools/aapt2/ResourceParser.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index 45cea8190844..859fe80c5ce7 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -769,16 +769,14 @@ std::unique_ptr<Item> ResourceParser::ParseXml(xml::XmlPullParser* parser,
return std::move(string);
}
- // If the text is empty, and the value is not allowed to be a string, encode it as a @null.
- if (util::TrimWhitespace(raw_value).empty()) {
- return ResourceUtils::MakeNull();
- }
-
if (allow_raw_value) {
// We can't parse this so return a RawString if we are allowed.
return util::make_unique<RawString>(
table_->string_pool.MakeRef(util::TrimWhitespace(raw_value),
StringPool::Context(config_)));
+ } else if (util::TrimWhitespace(raw_value).empty()) {
+ // If the text is empty, and the value is not allowed to be a string, encode it as a @null.
+ return ResourceUtils::MakeNull();
}
return {};
}