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

Commit c2b0782c authored by Ryan Mitchell's avatar Ryan Mitchell
Browse files

Fix flaky idmap test

The entry pool is encoded in UTF-8 not UTF-16. This would cause stringAt
to return a pointer to a cache that holds the UTF-8 string converted to
UTF-16. If the cache becomes invalidated, the UTF-16 pointer is no
longer valid and causes seg faults when looked up.

Test: libandroidfw_tests
Change-Id: I0f13dbeadd0d148de2805efd6cadb8e220368e3b
parent 70c02611
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1709,13 +1709,13 @@ public:

    struct resource_name
    {
        const char16_t* package;
        const char16_t* package = NULL;
        size_t packageLen;
        const char16_t* type;
        const char* type8;
        const char16_t* type = NULL;
        const char* type8 = NULL;
        size_t typeLen;
        const char16_t* name;
        const char* name8;
        const char16_t* name = NULL;
        const char* name8 = NULL;
        size_t nameLen;
    };

+3 −3
Original line number Diff line number Diff line
@@ -94,15 +94,15 @@ TEST_F(IdmapTest, OverlaidResourceHasSameName) {
            target_table_.add(overlay_data_.data(), overlay_data_.size(), data_, data_size_));

  ResTable::resource_name res_name;
  ASSERT_TRUE(target_table_.getResourceName(R::array::integerArray1, false, &res_name));
  ASSERT_TRUE(target_table_.getResourceName(R::array::integerArray1, true, &res_name));

  ASSERT_TRUE(res_name.package != NULL);
  ASSERT_TRUE(res_name.type != NULL);
  ASSERT_TRUE(res_name.name != NULL);
  ASSERT_TRUE(res_name.name8 != NULL);

  EXPECT_EQ(String16("com.android.basic"), String16(res_name.package, res_name.packageLen));
  EXPECT_EQ(String16("array"), String16(res_name.type, res_name.typeLen));
  EXPECT_EQ(String16("integerArray1"), String16(res_name.name, res_name.nameLen));
  EXPECT_EQ(String8("integerArray1"), String8(res_name.name8, res_name.nameLen));
}

constexpr const uint32_t kNonOverlaidResourceId = 0x7fff0000u;