From beccdbe7f5f6841c2b17013a4408a7eddaef8cdf Mon Sep 17 00:00:00 2001 From: Alex Jbanca Date: Wed, 29 Jul 2026 16:51:12 +0300 Subject: [PATCH] chore: bump nimqml-seaqt (model wrappers own their C++ object) The model setups never set QObject.owner, so delete() silently no-oped for every model: dropping a Nim model leaked its C++ object alive with a dangling Nim pointer, and any later consumer callback (view rowCount, roleNames) was a use-after-free. This crashed the send modal when switching networks dropped token-selector rows whose nested submodels QML still referenced. https://github.com/seaqt/nimqml-seaqt/commit/87d0d12 --- test/nim/token_selector_model_test.nim | 11 +++++++++++ vendor/nimqml-seaqt | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/test/nim/token_selector_model_test.nim b/test/nim/token_selector_model_test.nim index 9e07a2224a..9017bd8717 100644 --- a/test/nim/token_selector_model_test.nim +++ b/test/nim/token_selector_model_test.nim @@ -174,6 +174,17 @@ suite "TokenSelectorModel - nested balances submodel": teardown: spy.disable() + test "deleting a model actually deletes the C++ object (owner flag set)": + # nimqml-seaqt QAbstractItemModel/ListModel/TableModel setups assign vptr but + # never set QObject.owner, so delete() silently no-ops: the C++ model leaks + # alive with a dangling Nim pointer, and any consumer callback afterwards + # (view rowAt -> rowCount, ModelQuery roleNames) is a use-after-free — the + # send-modal token-selector crash. + let doomed = newTokenSelectorBalancesModel(@[]) + check doomed.vptr != nil + doomed.QAbstractListModel.delete() + check doomed.vptr == nil # delete must reach the C++ side, not early-return + test "balances submodel exposes the chips joined per chain": let m = newTokenSelectorModel() m.setSourceItems(@[ diff --git a/vendor/nimqml-seaqt b/vendor/nimqml-seaqt index acf9fe19b3..87d0d1215a 160000 --- a/vendor/nimqml-seaqt +++ b/vendor/nimqml-seaqt @@ -1 +1 @@ -Subproject commit acf9fe19b3ef3cb4c2099848c44fc7c384a00bc3 +Subproject commit 87d0d1215a537b820d06ad7a79846d2d2dc95114