[libunwind] Fix incorrect check for out-of-boundedness
authorLouis Dionne <ldionne@apple.com>
Tue, 11 Aug 2020 19:29:00 +0000 (15:29 -0400)
committerLouis Dionne <ldionne@apple.com>
Tue, 11 Aug 2020 19:37:57 +0000 (15:37 -0400)
If the personalityIndex (which is 0-based) is equal to the length of
the personality array, we should error out.

rdar://18013273

libunwind/src/UnwindCursor.hpp

index 48902ea..03e21fb 100644 (file)
@@ -1764,7 +1764,7 @@ bool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(pint_t pc,
                               (__builtin_ctz(UNWIND_PERSONALITY_MASK));
   if (personalityIndex != 0) {
     --personalityIndex; // change 1-based to zero-based index
-    if (personalityIndex > sectionHeader.personalityArrayCount()) {
+    if (personalityIndex >= sectionHeader.personalityArrayCount()) {
       _LIBUNWIND_DEBUG_LOG("found encoding 0x%08X with personality index %d,  "
                             "but personality table has only %d entries",
                             encoding, personalityIndex,