protonscr

Steam UI breaks if a game update finishes, while the user performs a drag&drop operation re-ordering the update queue

steamopen Steam client
ValveSoftware/steam-for-linux#9907 · opened 2023-07-25 by luziferius · updated 2023-08-03 · 2 comments · github
Lluziferius 2023-07-25 github

Your system information

  • Steam client version (build number or date): 1689034492
  • Distribution (e.g. Ubuntu): Kubuntu 23.04, Running latest KDE 5.27.6 on X11
  • Opted into Steam client beta?: No
  • Have you checked for system updates?: Yes
  • Steam Logs: steam-logs.tar.gz (Potentially invalid. I re-started the client once after it occurred.)
  • GPU: NVidia GTX 1070, driver version 535.86.05

Please describe your issue in as much detail as possible:

I wanted to re-order game updates, pushing two large ones to the end of the queue via drag&drop. During the drag operation, a game update finished, shifting the items in the queue up. This caused the UI to apparently allow dropping the held item onto another item, instead of the free space. (The item below the cursor no longer moved away automatically.) Releasing the mouse cursor, dropping the held item directly onto another the last item, breaks the entire UI.

The offered Reload button does fix the issue, though.

Steps for reproducing this issue:

(Updated 3.8.2023)

  1. Have an update queue running, with at least 2-3 updates waiting and one running.
  2. Start dragging the last element currently waiting for being updated
  3. Wait until the currently running game update finishes
  4. Now, it is possible to drop the held item back, but the now-last element won't move away
  5. Drop it onto the last item in the list
  6. When doing so, the UI breaks showing this:
    Screenshot_20230725_234113
Lluziferius 2023-07-26 github

I thought a bit about the possible cause. It happens when dropping on the last item.
In JavaScript, an out-of-bounds array read returns undefined.

I guess that the drag&drop handler operates on the initial item index and array size, and does not handle asynchronous item deletions.

That would align with the error message, as the out-of-bounds read does not have the appid property, which is probably used as the key to swap the items or used otherwise.

Lluziferius 2023-08-03 github

I narrowed it further down. The user must specifically move the last item of the queue.

demonstration_video.webm

Nothing extracted yet.