Skip to content

fix: black screen when entry list is empty - #723

Open
ericreinsmidt wants to merge 1 commit into
LoveRetro:mainfrom
ericreinsmidt:fix/empty-list-black-screen
Open

fix: black screen when entry list is empty#723
ericreinsmidt wants to merge 1 commit into
LoveRetro:mainfrom
ericreinsmidt:fix/empty-list-black-screen

Conversation

@ericreinsmidt

Copy link
Copy Markdown

Summary

  • When Tools are disabled on a fresh install with no ROMs, the main entry list is empty
  • Multiple code paths in nextui.c access entries without bounds checks, causing a black screen
  • Added total>0 guards and null-safe patterns to prevent crashes and render a usable empty state

Fixes #712

Test plan

  • Disable Tools on a fresh install with no ROMs — should show empty state, not black screen
  • Verify normal operation with ROMs and Tools enabled is unaffected

When Tools are disabled on a fresh install with no ROMs, the main list
is empty but multiple code paths access entries without bounds checks.
Added total>0 guards and null-safe patterns to prevent crashes and
render a usable empty state instead of a black screen.

Fixes LoveRetro#712
@ericreinsmidt
ericreinsmidt force-pushed the fix/empty-list-black-screen branch from 6ff4579 to 44ea223 Compare May 19, 2026 03:24
lepht pushed a commit to lepht/nexterUI that referenced this pull request Aug 12, 2026
Closes #6. Adopted from upstream LoveRetro#723 by Eric Reinsmidt,
taken while upstream is still GPL-3.0 (see LoveRetro#765).

top->entries->items[top->selected] was loaded unconditionally in both the
input and the render path, so an empty directory read an uninitialised
pointer out of the capacity-8 allocation Array_new() never clears. The
render path then ran assert(entry) over it, which is an abort in a debug
build rather than a latent read.

This is the fix #6 asked for: hoist the count check above the load in both
paths instead of relying on the downstream total>0 guards. The L1/R1 alpha
jump handlers get the same treatment, and the assert goes away.

Every remaining read of entries->items[top->selected] in this file is now
behind a count or total>0 check. Array_new() still leaves its capacity
uninitialised - that is unchanged and now unreachable, not fixed.

Upstream wrote this for the empty-root case (no roms, Tools hidden); it
covers the ordinary empty Roms/ folder #6 describes by the same route.

Co-Authored-By: Eric Reinsmidt <eric@reinsmidt.com>
lepht pushed a commit to lepht/nexterUI that referenced this pull request Aug 12, 2026
Closes #6. Adopted from upstream LoveRetro#723 by Eric Reinsmidt,
taken while upstream is still GPL-3.0 (see LoveRetro#765).

top->entries->items[top->selected] was loaded unconditionally in both the
input and the render path, so an empty directory read an uninitialised
pointer out of the capacity-8 allocation Array_new() never clears. The
render path then ran assert(entry) over it, which is an abort in a debug
build rather than a latent read.

This is the fix #6 asked for: hoist the count check above the load in both
paths instead of relying on the downstream total>0 guards. The L1/R1 alpha
jump handlers get the same treatment, and the assert goes away.

Every remaining read of entries->items[top->selected] in this file is now
behind a count or total>0 check. Array_new() still leaves its capacity
uninitialised - that is unchanged and now unreachable, not fixed.

Upstream wrote this for the empty-root case (no roms, Tools hidden); it
covers the ordinary empty Roms/ folder #6 describes by the same route.

Co-Authored-By: Eric Reinsmidt <eric@reinsmidt.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Disabling Tools on Fresh Install, but not having ROMS will lead to getting Stuck on Black Screen

1 participant