[SRU] Bionic: PikoPixel 1.0 BETA9b can crash when resizing a document window

Bug #1770777 reported by Josh Freeman
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
pikopixel.app (Ubuntu)
Fix Released
Undecided
Unassigned
Bionic
Fix Released
Undecided
Unassigned

Bug Description

In PikoPixel 1.0 BETA9b (current Bionic version), resizing an image window to within a few pixels of the canvas size can cause the app to freeze, eventually crashing due to a stack overflow.

   A bugfix update, 1.0 BETA9c, fixes the issue, and is now in the Cosmic repo. Updating Bionic to Cosmic's version would prevent users from losing unsaved image data due to this issue.

   The crash is the result of a bug in PikoPixel's scrollview-layout code that causes an infinite-recursion loop of hiding & showing the scrollers: Window is resized -> Scrollview layout is updated -> New layout causes scrollers to become visible -> Scroller-visibility change causes re-layout of scrollview -> New layout causes scrollers to hide -> Scroller-visibility change causes re-layout of scrollview -> New layout causes scrollers to show -> etc.

[Test Case]
1) Start the PikoPixel app.
2) On the "New Image" panel, click the "OK" button to create a new image (64x64 default size).
3) The new window will display the image canvas (alternating white/grey diagonal lines with a grid-dot overlay) in the center, with a grey margin surrounding the canvas.
4) If the bottom-right corner of the image window is covered by the "Tool Modifier Tips" panel, either click the panel's close button to hide it, or move it so the corner is visible.
5) Move the mouse over the image window's bottom-right corner, and the mouse cursor should become a "horizontal/vertical resize" cursor (an arrow pointing towards the lower right).
6) While the resize cursor is visible, click the corner of the window & slowly drag it towards the upper-left to make the window smaller. The canvas should stay the same size, and the grey margins should shrink (keeping the canvas centered in the window).
7) The app-freeze happens at about the point in the resize-drag when there's no more than a pixel or two of grey margin (or no margin at all). It may take a few tries to get it to freeze, but once the margins are small, slowly moving the mouse in a circular motion should eventually trigger it. The point of moving in a circle is to cause the scrollers to alternate between becoming visible (when the window becomes smaller than the canvas), and then hiding again (when the window is larger than the canvas).
8) When the app becomes frozen, the window itself will continue to resize in response to mouse-dragging, however the window content will stop updating, and the grey margins will no longer grow & shrink. At this point, the menus & canvas tools will no longer respond, and a system dialog may eventually appear, notifying that the window is unresponsive. (Force-quitting the app is recommended, otherwise it will eventually overflow the stack).

[Regression Potential]
   The 1.0 BETA9c fix prevents the crash by updating the custom-layout functionality to prevent a recursive loop of showing/hiding the scrollers. It has been tested & verified that the crash no longer appears, and although no issue has been found, the most likely regression from preventing the recursive-layout loop would be that the scrollview layout would become out-of-sync with the window size. Although this is rather unlikely (layout should happen at least once nonrecursively), the unsynced-layout would just be a cosmetic issue - no stack overflow, so the app would continue to run & interact.

Revision history for this message
Thomas Ward (teward) wrote :

A provisional debdiff is attached here.

CONSIDERATIONS:

 1) Upstream for this application does not use version control. Therefore, the patch, while using Upstream changes extracted from the diff between the latest release and previous release of the upstream application, has an upstream origination without a URL available (because there is no version control)

 2) Upstream has bundled two fixes in the latest 'update'. For this reason, only the crash-related patch and changes were included in this debdiff.

 3) Upstream developer who filed this bug was contacted by me and coordinated by way of IRC Private Message to determine the exact changes needed to address the patch. Therefore, patch author is half myself, and half upstream to the extent of the patch having to be created.

 4) Build tests were not run locally due to issues with local chroots. Build tests are now being run at, and will be available for testing the built application from, my PPA that I'm using for this build test - https://launchpad.net/~teward/+archive/ubuntu/pikopixel-builds

**This debdiff is not tested by me, and should not be accepted until someone who is familiar with PikoPixel or who can actually devote time to testing the builds can confirm this is actually fixing the crash problem.**

I volunteered to help with the packaging bits, but I do not yet have a Bionic box that I can use to test this application or the fix. (other than servers which cannot run this application).

Note that the SRU should probably be trimmed down to focus solely on the crash issue being addressed.

Revision history for this message
Josh Freeman (tedge) wrote :

Removed the info about the second issue to focus the SRU on the crash.

description: updated
Josh Freeman (tedge)
tags: added: verification-needed-bionic
Revision history for this message
Gianfranco Costamagna (costamagnagianfranco) wrote :

sponsored in bionic!

Changed in pikopixel.app (Ubuntu):
status: New → Fix Released
Changed in pikopixel.app (Ubuntu Bionic):
status: New → In Progress
Revision history for this message
Łukasz Zemczak (sil2100) wrote : Please test proposed package

Hello Josh, or anyone else affected,

Accepted pikopixel.app into bionic-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/pikopixel.app/1.0-b9b-1ubuntu1 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed.Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested and change the tag from verification-needed-bionic to verification-done-bionic. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-bionic. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

Changed in pikopixel.app (Ubuntu Bionic):
status: In Progress → Fix Committed
tags: added: verification-needed
Revision history for this message
Josh Freeman (tedge) wrote :

VERIFICATION DONE:
On a fresh 18.04 VM, installed 1.0-b9b-1ubuntu1 from the -proposed repo, and verified that it fixes the bug; Was unable to get it to crash by resizing an image window.

Did some additional testing & made some pixel-art in order to check for regressions, and didn't find any new issues.

Josh Freeman (tedge)
tags: added: verification-done-bionic
removed: verification-needed-bionic
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package pikopixel.app - 1.0-b9b-1ubuntu1

---------------
pikopixel.app (1.0-b9b-1ubuntu1) bionic; urgency=medium

  * debian/patches/lp1770777.patch: Apply upstream fixes implemented by a
    version bump to address a program crash issue. (LP: #1770777)

 -- Thomas Ward <email address hidden> Tue, 15 May 2018 15:03:04 -0400

Changed in pikopixel.app (Ubuntu Bionic):
status: Fix Committed → Fix Released
Revision history for this message
Łukasz Zemczak (sil2100) wrote : Update Released

The verification of the Stable Release Update for pikopixel.app has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.