diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-10-27 11:14:23 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-10-28 08:42:49 -0400 |
commit | a605cdf7008f856946cbf01193f4dffc3ee63fdb (patch) | |
tree | 53368641340ffd9d10f77f56b2bde66916a1cfd1 /apps/gui/bitmap | |
parent | 621e363e70e69a92169494515c5637551ceba219 (diff) | |
download | rockbox-a605cdf7008f856946cbf01193f4dffc3ee63fdb.tar.gz rockbox-a605cdf7008f856946cbf01193f4dffc3ee63fdb.zip |
Fix multiple potential null pointer dereferencess
GCC's optimizer thinks all of these _will_ fail at some point
Change-Id: I287eeb574162a5d3b3347654d25aa1f53e9f5563
Diffstat (limited to 'apps/gui/bitmap')
-rw-r--r-- | apps/gui/bitmap/list-skinned.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/apps/gui/bitmap/list-skinned.c b/apps/gui/bitmap/list-skinned.c index f0396263f3..c5429738ed 100644 --- a/apps/gui/bitmap/list-skinned.c +++ b/apps/gui/bitmap/list-skinned.c | |||
@@ -219,7 +219,9 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list) | |||
219 | { | 219 | { |
220 | int original_x, original_y; | 220 | int original_x, original_y; |
221 | skin_viewport = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->data); | 221 | skin_viewport = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->data); |
222 | char *viewport_label = SKINOFFSETTOPTR(get_skin_buffer(wps.data), skin_viewport->label); | 222 | char *viewport_label = NULL; |
223 | if (skin_viewport) | ||
224 | viewport_label = SKINOFFSETTOPTR(get_skin_buffer(wps.data), skin_viewport->label); | ||
223 | if (viewport->children == 0 || !viewport_label || | 225 | if (viewport->children == 0 || !viewport_label || |
224 | (skin_viewport->label && strcmp(label, viewport_label)) | 226 | (skin_viewport->label && strcmp(label, viewport_label)) |
225 | ) | 227 | ) |
@@ -254,13 +256,17 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list) | |||
254 | while (imglist) | 256 | while (imglist) |
255 | { | 257 | { |
256 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->token); | 258 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->token); |
257 | struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(wps.data), token->value.data); | 259 | struct gui_img *img = NULL; |
258 | img->display = -1; | 260 | if (token) |
261 | img = SKINOFFSETTOPTR(get_skin_buffer(wps.data), token->value.data); | ||
262 | if (img) | ||
263 | img->display = -1; | ||
259 | imglist = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->next); | 264 | imglist = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->next); |
260 | } | 265 | } |
261 | struct skin_element** children = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->children); | 266 | struct skin_element** children = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->children); |
262 | skin_render_viewport(SKINOFFSETTOPTR(get_skin_buffer(wps.data), (intptr_t)children[0]), | 267 | if (children && *children) |
263 | &wps, skin_viewport, SKIN_REFRESH_ALL); | 268 | skin_render_viewport(SKINOFFSETTOPTR(get_skin_buffer(wps.data), (intptr_t)children[0]), |
269 | &wps, skin_viewport, SKIN_REFRESH_ALL); | ||
264 | wps_display_images(&wps, &skin_viewport->vp); | 270 | wps_display_images(&wps, &skin_viewport->vp); |
265 | /* force disableing scroll because it breaks later */ | 271 | /* force disableing scroll because it breaks later */ |
266 | if (!is_selected) | 272 | if (!is_selected) |
@@ -278,4 +284,3 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list) | |||
278 | current_drawing_line = list->selected_item; | 284 | current_drawing_line = list->selected_item; |
279 | return true; | 285 | return true; |
280 | } | 286 | } |
281 | |||