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

Commit 25e9d55e authored by Adam Lesinski's avatar Adam Lesinski
Browse files

Don't dump data from a bad ResTable

AAPT dumps data from a bad ResTable, which
causes crashes. Prevent this by checking if
there were errors when creating the ResTable.

Bug:14902008
Change-Id: I5e04ebf967c60b78c511dd175785a13bca52f09a
parent 605a07be
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -634,6 +634,9 @@ int doDump(Bundle* bundle)
    if (&res == NULL) {
        fprintf(stderr, "ERROR: dump failed because no resource table was found\n");
        goto bail;
    } else if (res.getError() != NO_ERROR) {
        fprintf(stderr, "ERROR: dump failed because the resource table is invalid/corrupt.\n");
        goto bail;
    }

    if (strcmp("resources", option) == 0) {
+8 −0
Original line number Diff line number Diff line
@@ -33,6 +33,14 @@ void strcpy16_htod(uint16_t* dst, const uint16_t* src)

void printStringPool(const ResStringPool* pool)
{
    if (pool->getError() == NO_INIT) {
        printf("String pool is unitialized.\n");
        return;
    } else if (pool->getError() != NO_ERROR) {
        printf("String pool is corrupt/invalid.\n");
        return;
    }

    SortedVector<const void*> uniqueStrings;
    const size_t N = pool->size();
    for (size_t i=0; i<N; i++) {