Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efa42b1e authored by Jeremy Meyer's avatar Jeremy Meyer
Browse files

Dont parse resource values behind disabled flags

This change makes it so that when we are parsing resources and there is
one behind a disabled flag we don't parse the value. This is primarily
to prevent disabled strings from ending up in the string pool.

Test: automated
Bug: 329436914
Flag: EXEMPT Aconfig not supported on host tools
Change-Id: I4d8683ac820a3fd20cd92c223464f912b0ac422d
parent d659822b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -690,7 +690,9 @@ bool ResourceParser::ParseResource(xml::XmlPullParser* parser,
        resource_format = item_iter->second.format;
      }

      if (!ParseItem(parser, out_resource, resource_format)) {
      // Don't bother parsing the item if it is behind a disabled flag
      if (out_resource->flag_status != FlagStatus::Disabled &&
          !ParseItem(parser, out_resource, resource_format)) {
        return false;
      }
      return true;
+20 −2
Original line number Diff line number Diff line
@@ -69,8 +69,13 @@ class ResourceParserTest : public ::testing::Test {
    return TestParse(str, ConfigDescription{});
  }

  ::testing::AssertionResult TestParse(StringPiece str, const ConfigDescription& config) {
    ResourceParserOptions parserOptions;
  ::testing::AssertionResult TestParse(StringPiece str, ResourceParserOptions parserOptions) {
    return TestParse(str, ConfigDescription{}, parserOptions);
  }

  ::testing::AssertionResult TestParse(
      StringPiece str, const ConfigDescription& config,
      ResourceParserOptions parserOptions = ResourceParserOptions()) {
    ResourceParser parser(context_->GetDiagnostics(), &table_, android::Source{"test"}, config,
                          parserOptions);

@@ -242,6 +247,19 @@ TEST_F(ResourceParserTest, ParseStringTranslatableAttribute) {
  EXPECT_FALSE(TestParse(R"(<string name="foo4" translatable="yes">Translate</string>)"));
}

TEST_F(ResourceParserTest, ParseStringBehindDisabledFlag) {
  FeatureFlagProperties flag_properties(true, false);
  ResourceParserOptions options;
  options.feature_flag_values = {{"falseFlag", flag_properties}};
  ASSERT_TRUE(TestParse(
      R"(<string name="foo" android:featureFlag="falseFlag"
              xmlns:android="http://schemas.android.com/apk/res/android">foo</string>)",
      options));

  String* str = test::GetValue<String>(&table_, "string/foo");
  ASSERT_THAT(str, IsNull());
}

TEST_F(ResourceParserTest, IgnoreXliffTagsOtherThanG) {
  std::string input = R"(
      <string name="foo" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">