From 20d29ea721119193da1bd23e8e89d93ddcedf4e1 Mon Sep 17 00:00:00 2001 From: William Miles Date: Mon, 5 Sep 2022 15:29:29 +1000 Subject: [PATCH] Fixed group traversal bug. Added ACHR flag "Unknown 30". All non-REFR flags checked. --- espReader/Derived.c | 1 + espReader/Reader.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/espReader/Derived.c b/espReader/Derived.c index 3b491f5..775d29b 100644 --- a/espReader/Derived.c +++ b/espReader/Derived.c @@ -186,6 +186,7 @@ rfs_inner _achr = { [11] = "Initially Disabled", [25] = "No AI Acquire", [29] = "Don't Havok Settle", + [30] = "ACHR Unknown 30", }; rfs_inner _acti = { diff --git a/espReader/Reader.c b/espReader/Reader.c index 925397e..4f45bb6 100644 --- a/espReader/Reader.c +++ b/espReader/Reader.c @@ -77,7 +77,10 @@ const char *walk_unknown_data(const char *data, size_t size) { const char *end = data + size; while (data != end) { - assert(data < end); + if (data >= end) { + fflush(stdout); + assert(false); + } const Type4 *type = (Type4 *)data; @@ -101,9 +104,10 @@ const char *walk_group(const char *data) { const char *const start = data + sizeof(Group); const char *const end = data + header->size; + size_t size = header->size - sizeof(Group); // walk through the groups/records inside the group - data = walk_unknown_data(start, header->size); + data = walk_unknown_data(start, size); assert(data == end); return data; @@ -205,7 +209,8 @@ void print_record_flags(Record *const header) { if (str) { printf(" - %s\n", str); flags -= ((uint32_t)1) << highest; - } + } else + break; } } }