1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 20:35:33 +03:00

Fix pageMaxRow use before update

After commit d2e7abd the for loop following my change use pageMaxRow to determine which flags to clear.
But this pageMaxRow value is updated after the loop, which caused a crash in a very specific circumstance:

1 open the CMS OSD menu and go to profile

2 close the profile by yaw right, select exit

3 open CMS OSD menu and go to profile again

This caused a crash as runtimeEntryFlags wasn't cleared properly and the Copy Profile entry's flags still indicated OPTSTRING somehow.
which caused it's CMSEntryFuncPtr function to be cast to OPTSTRING and called without arguments.
This commit is contained in:
Timothy Werquin 2019-05-08 00:36:23 +02:00 committed by GitHub
parent 1cbff2b9aa
commit 711424f63b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -250,13 +250,13 @@ static void cmsPageSelect(displayPort_t *instance, int8_t newpage)
{ {
currentCtx.page = (newpage + pageCount) % pageCount; currentCtx.page = (newpage + pageCount) % pageCount;
pageTop = &currentCtx.menu->entries[currentCtx.page * maxMenuItems]; pageTop = &currentCtx.menu->entries[currentCtx.page * maxMenuItems];
cmsUpdateMaxRow(instance);
const OSD_Entry *p; const OSD_Entry *p;
int i; int i;
for (p = pageTop, i = 0; (p <= pageTop + pageMaxRow); p++, i++) { for (p = pageTop, i = 0; (p <= pageTop + pageMaxRow); p++, i++) {
runtimeEntryFlags[i] = p->flags; runtimeEntryFlags[i] = p->flags;
} }
cmsUpdateMaxRow(instance);
displayClearScreen(instance); displayClearScreen(instance);
} }