From 25e9d55e964c180ec6e57ba1d977d6c2e1115f5a Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Mon, 19 May 2014 15:01:43 -0700 Subject: 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 --- tools/aapt/Command.cpp | 3 +++ tools/aapt/StringPool.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) (limited to 'tools') diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp index 4e0a9fe..cc0da15 100644 --- a/tools/aapt/Command.cpp +++ b/tools/aapt/Command.cpp @@ -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) { diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp index 158b391..06769e4 100644 --- a/tools/aapt/StringPool.cpp +++ b/tools/aapt/StringPool.cpp @@ -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 uniqueStrings; const size_t N = pool->size(); for (size_t i=0; i