diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-10-28 18:51:57 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-10-28 18:51:57 -0400 |
commit | a5a8e00b6d0939527eb764745eef6f86d187cc6a (patch) | |
tree | f266f16ac7e9961359e5fd75b7b7b55f23baedf4 | |
parent | 8c8284bbe642318a8c661a834456841307431a7b (diff) | |
download | rockbox-a5a8e00b6d0939527eb764745eef6f86d187cc6a.tar.gz rockbox-a5a8e00b6d0939527eb764745eef6f86d187cc6a.zip |
Fix a crash introduced in a605cdf70
Pretty subtle problem; looks like the skin core was relying on a
destructor to actually help initialize things.
Change-Id: Ieb4b9e4f11377dec7be61d13759590fc5f4bc921
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 8e59c2c2b0..789d42aab5 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -1715,7 +1715,7 @@ void skin_data_free_buflib_allocs(struct wps_data *wps_data) | |||
1715 | if (wps_data->wps_loaded) | 1715 | if (wps_data->wps_loaded) |
1716 | skin_buffer = get_skin_buffer(wps_data); | 1716 | skin_buffer = get_skin_buffer(wps_data); |
1717 | if (!skin_buffer) | 1717 | if (!skin_buffer) |
1718 | return; | 1718 | goto abort; |
1719 | 1719 | ||
1720 | #ifndef __PCTOOL__ | 1720 | #ifndef __PCTOOL__ |
1721 | struct skin_token_list *list = SKINOFFSETTOPTR(skin_buffer, wps_data->images); | 1721 | struct skin_token_list *list = SKINOFFSETTOPTR(skin_buffer, wps_data->images); |
@@ -1744,13 +1744,15 @@ void skin_data_free_buflib_allocs(struct wps_data *wps_data) | |||
1744 | } | 1744 | } |
1745 | list = SKINOFFSETTOPTR(skin_buffer, list->next); | 1745 | list = SKINOFFSETTOPTR(skin_buffer, list->next); |
1746 | } | 1746 | } |
1747 | wps_data->images = PTRTOSKINOFFSET(skin_buffer, NULL); | ||
1748 | if (font_ids != NULL) | 1747 | if (font_ids != NULL) |
1749 | { | 1748 | { |
1750 | while (wps_data->font_count > 0) | 1749 | while (wps_data->font_count > 0) |
1751 | font_unload(font_ids[--wps_data->font_count]); | 1750 | font_unload(font_ids[--wps_data->font_count]); |
1752 | } | 1751 | } |
1753 | wps_data->font_ids = PTRTOSKINOFFSET(skin_buffer, NULL); | 1752 | |
1753 | abort: | ||
1754 | wps_data->font_ids = PTRTOSKINOFFSET(skin_buffer, NULL); /* Safe if skin_buffer is NULL */ | ||
1755 | wps_data->images = PTRTOSKINOFFSET(skin_buffer, NULL); | ||
1754 | if (wps_data->buflib_handle > 0) | 1756 | if (wps_data->buflib_handle > 0) |
1755 | core_free(wps_data->buflib_handle); | 1757 | core_free(wps_data->buflib_handle); |
1756 | wps_data->buflib_handle = -1; | 1758 | wps_data->buflib_handle = -1; |