Skip to content

SIGABRT in wlr_scene_buffer_set_opacity (opacity >= 0 && opacity <= 1) during animations #383

Description

@g-lpm

Scroll Version:

scroll version 1.12.20-1.fc44 (Fedora 44, AMD x86-64)

Debug Log:

Omitted. The provided full GDB backtrace captures the exact assertion failure in wlr_scene_buffer_set_opacity.

Configuration File:
https://gist.github.com/g-lpm/3e998e0ef906bd40db76afa0532ba1dd

Stack Trace:

Core was generated by `/usr/bin/scroll'.
Program terminated with signal SIGABRT, Aborted.
#0 __pthread_kill_implementation (threadid=, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1 0x00007f3a9dad4d93 in __pthread_kill_internal (threadid=, signo=6) at pthread_kill.c:89
#2 0x00007f3a9da79e8e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007f3a9da617b3 in __GI_abort () at abort.c:77
#4 0x00007f3a9da62804 in __libc_message_impl (vma_name=vma_name@entry=0x7f3a9dc13ea3 "glibc: assert", fmt=) at ../sysdeps/posix/libc_fatal.c:138
#5 0x00007f3a9da71d45 in __libc_message_wrapper (vmaname=0x7f3a9dc13ea3 "glibc: assert", fmt=) at ../include/stdio.h:203
#6 __assert_fail (assertion=0x55a50e9a55ed "opacity >= 0 && opacity <= 1", file=0x55a50e99f078 "types/scene/wlr_scene.c", line=, function=) at assert.c:37
#7 0x000055a50e84a4a6 in wlr_scene_buffer_set_opacity[cold] ()
#8 0x000055a50e87343d in output_configure_scene.part ()
#14 0x000055a50e874b77 in animate_container.constprop.0.isra ()
#15 0x000055a50e875018 in animate_children.part ()
#17 0x000055a50e87553a in animate_output ()
#18 0x000055a50e875833 in animate_root.lto_priv ()
#19 0x000055a50e8dff87 in animate.lto_priv ()
#20 0x000055a50e933945 in wlr_scene_output_build_state ()
#21 0x000055a50e8735e0 in output_repaint_timer_handler.part ()

Description:
Since updating to scroll 1.12.20-1 on Fedora 44, the compositor consistently crashes with a SIGABRT during window animations.

The backtrace indicates an assertion failure triggered by wlroots (opacity >= 0 && opacity <= 1 inside types/scene/wlr_scene.c). Scroll's animation engine (specifically inside animate_container and animate_children) appears to be calculating an out-of-bounds opacity value and passing it to wlr_scene_buffer_set_opacity, causing the compositor to abort.

Steps to reproduce:

Boot into a system running scroll 1.12.20-1.

Ensure window animations (e.g., fading) are enabled in the configuration.

Trigger an animation (opening/closing a window, switching workspaces).

The compositor immediately crashes to sddm.

Setting animations to 0/none in the configuration successfully prevents the crash.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions