godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91k stars 21.17k forks source link

Godot crashes in TabContainer::_draw_tab when running project #43165

Closed qarmin closed 4 years ago

qarmin commented 4 years ago

Godot version: 4.0.dev.custom_build. 496089488

Regression from https://github.com/godotengine/godot/pull/42766

Issue description: When I run project which worked fine before, then this backtrace is shown:

ERROR: Index p_index = 0 is out of bounds (get_tab_count() = 0).
   at: _get_tab_width (scene/gui/tab_container.cpp:487)
ERROR: FATAL: Index p_index = 0 is out of bounds (size() = 0).
   at: get (./core/cowdata.h:153)
handle_crash: Program crashed with signal 4
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x46210) [0x7faa953da210] (??:0)
[2] CowData<Control*>::get(int) const (/mnt/Miecz/godot/./core/cowdata.h:153 (discriminator 7))
[3] Vector<Control*>::operator[](int) const (/mnt/Miecz/godot/./core/vector.h:89)
[4] TabContainer::_draw_tab(Ref<StyleBox>&, Color&, int, float) (/mnt/Miecz/godot/scene/gui/tab_container.cpp:425)
[5] TabContainer::_notification(int) (/mnt/Miecz/godot/scene/gui/tab_container.cpp:378)
[6] TabContainer::_notificationv(int, bool) (/mnt/Miecz/godot/scene/gui/tab_container.h:37 (discriminator 14))
[7] Object::notification(int, bool) (/mnt/Miecz/godot/core/object.cpp:808)
[8] CanvasItem::_update_callback() (/mnt/Miecz/godot/scene/main/canvas_item.cpp:434)
[9] void call_with_variant_args_helper<__UnexistingClass>(__UnexistingClass*, void (__UnexistingClass::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (/mnt/Miecz/godot/./core/binder_common.h:217 (discriminator 4))
[10] void call_with_variant_args_dv<__UnexistingClass>(__UnexistingClass*, void (__UnexistingClass::*)(), Variant const**, int, Callable::CallError&, Vector<Variant> const&) (/mnt/Miecz/godot/./core/binder_common.h:334)
[11] MethodBindT<>::call(Object*, Variant const**, int, Callable::CallError&) (/mnt/Miecz/godot/./core/method_bind.h:288)
[12] Object::call(StringName const&, Variant const**, int, Callable::CallError&) (/mnt/Miecz/godot/core/object.cpp:797 (discriminator 1))
[13] Callable::call(Variant const**, int, Variant&, Callable::CallError&) const (/mnt/Miecz/godot/core/callable.cpp:53)
[14] MessageQueue::_call_function(Callable const&, Variant const*, int, bool) (/mnt/Miecz/godot/core/message_queue.cpp:259)
[15] MessageQueue::flush() (/mnt/Miecz/godot/core/message_queue.cpp:306)
[16] SceneTree::iteration(float) (/mnt/Miecz/godot/scene/main/scene_tree.cpp:415 (discriminator 2))
[17] Main::iteration() (/mnt/Miecz/godot/main/main.cpp:2400)
[18] OS_LinuxBSD::run() (/mnt/Miecz/godot/platform/linuxbsd/os_linuxbsd.cpp:261)
[19] /usr/bin/godot4(main+0x166) [0x1ca29cc] (/mnt/Miecz/godot/platform/linuxbsd/godot_linuxbsd.cpp:60)
[20] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0x7faa953bb0b3] (??:0)
[21] /usr/bin/godot4(_start+0x2e) [0x1ca27ae] (??:?)
-- END OF BACKTRACE --

Steps to reproduce:

  1. Run project

Minimal reproduction project: https://github.com/qarmin/RegressionTestProject/archive/master.zip

akien-mga commented 4 years ago

also in 3.2.4(PR - #43162, but seems that not always crash)

No longer as I reverted the cherry-pick for now.