From 4b2d0f20db2e0f9395a0c12ed5d4b6020eb272cb Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Thu, 14 Aug 2014 17:58:37 -0700 Subject: [PATCH] Fix crash in ResStringPool When a String isn't found in the StringPool, we should not try to construct a String8 object from the NULL string. Bug:15163956 Change-Id: I51e701918b10a72c18a860b8a36dce2afd9c0b82 --- libs/androidfw/ResourceTypes.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index 702f15070e257..1316cb8314843 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -802,11 +802,16 @@ const char* ResStringPool::string8At(size_t idx, size_t* outLen) const const String8 ResStringPool::string8ObjectAt(size_t idx) const { size_t len; - const char *str = (const char*)string8At(idx, &len); + const char *str = string8At(idx, &len); if (str != NULL) { - return String8(str); + return String8(str, len); } - return String8(stringAt(idx, &len)); + + const char16_t *str16 = stringAt(idx, &len); + if (str16 != NULL) { + return String8(str16, len); + } + return String8(); } const ResStringPool_span* ResStringPool::styleAt(const ResStringPool_ref& ref) const