OSDN Git Service

Fix order of operation issue with ResStringPool
authorAdam Lesinski <adamlesinski@google.com>
Thu, 21 Apr 2016 17:05:06 +0000 (10:05 -0700)
committerAdam Lesinski <adamlesinski@google.com>
Thu, 21 Apr 2016 17:05:06 +0000 (10:05 -0700)
Due to ! taking precedence over bitwise &, the condition for
checking non-null terminated string blocks is incorrect.

Adds parentheses for the correct behavior.

Bug:28288210
Change-Id: Ie31fa239e5f869e6bb28deb6ae190f41f1aa4d92

libs/androidfw/ResourceTypes.cpp

index 15cb684..c3dfb89 100644 (file)
@@ -562,7 +562,7 @@ status_t ResStringPool::setTo(const void* data, size_t size, bool copyData)
 
         if ((mHeader->flags&ResStringPool_header::UTF8_FLAG &&
                 ((uint8_t*)mStrings)[mStringPoolSize-1] != 0) ||
-                (!mHeader->flags&ResStringPool_header::UTF8_FLAG &&
+                (!(mHeader->flags&ResStringPool_header::UTF8_FLAG) &&
                 ((uint16_t*)mStrings)[mStringPoolSize-1] != 0)) {
             ALOGW("Bad string block: last string is not 0-terminated\n");
             return (mError=BAD_TYPE);