Prechádzať zdrojové kódy

LibGUI: Fix crash in GML Playground auto-completing SpinBox props

Crash was caused by deferred invocation of a lambda on the SpinBox's
TextEditor widget's on_change. The lambda referenced the SpinBox ptr,
but in GML Playground the SpinBox was free'd before the deferred
lambda could run, causing a use-after-free error. Fixed by using
a weak ptr to detect if the SpinBox was free'd.
Andrew Smith 3 rokov pred
rodič
commit
31a2ac94c7
1 zmenil súbory, kde vykonal 4 pridanie a 1 odobranie
  1. 4 1
      Userland/Libraries/LibGUI/SpinBox.cpp

+ 4 - 1
Userland/Libraries/LibGUI/SpinBox.cpp

@@ -18,7 +18,10 @@ SpinBox::SpinBox()
     set_fixed_height(22);
     m_editor = add<TextBox>();
     m_editor->set_text("0");
-    m_editor->on_change = [this] {
+    m_editor->on_change = [this, weak_this = make_weak_ptr()] {
+        if (!weak_this)
+            return;
+
         auto value = m_editor->text().to_uint();
         if (value.has_value())
             set_value(value.value());