gnucash stable: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Mon Sep 18 17:20:42 EDT 2023
Updated via https://github.com/Gnucash/gnucash/commit/a8c3b4b0 (commit)
via https://github.com/Gnucash/gnucash/commit/ee849382 (commit)
via https://github.com/Gnucash/gnucash/commit/63f1b305 (commit)
from https://github.com/Gnucash/gnucash/commit/c930fd07 (commit)
commit a8c3b4b078a9b6e8969c198b3d4b06128097e05b
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Sep 18 14:14:03 2023 -0700
Revert "[assistant-stock-transaction] refresh_handler: avoid leaking GList*"
macOS clang optimizes away the return value so g_hash_table_find always
returns the item pointer, causing premature destruction when a
GncAccountSel-created account edit dialog completes, leading to a
use-after-free crash.
diff --git a/gnucash/gnome/assistant-stock-transaction.cpp b/gnucash/gnome/assistant-stock-transaction.cpp
index 47e3c71156..f4efeea365 100644
--- a/gnucash/gnome/assistant-stock-transaction.cpp
+++ b/gnucash/gnome/assistant-stock-transaction.cpp
@@ -2655,12 +2655,6 @@ stock_assistant_cancel_cb (GtkAssistant *assistant, gpointer user_data)
}
-static bool
-is_destroying (gpointer key, EventInfo* change, gpointer user_data)
-{
- return (change->event_mask & QOF_EVENT_DESTROY);
-};
-
static void
refresh_handler (GHashTable *changes, gpointer user_data)
{
@@ -2671,12 +2665,18 @@ refresh_handler (GHashTable *changes, gpointer user_data)
* should be only one entry, so just get the value and see if it
* matches QOF_EVENT_DESTROY.
*/
- if (g_hash_table_find (changes, (GHRFunc)is_destroying, nullptr))
+ auto list = g_hash_table_get_values(changes);
+ for (auto node = list; node; node = g_list_next(node))
{
- PWARN ("Stock account destroyed, cancelling assistant.");
- auto controller = static_cast<StockAssistantController*>(user_data);
- gnc_close_gui_component_by_data(ASSISTANT_STOCK_TRANSACTION_CM_CLASS, controller);
+ auto change{static_cast<EventInfo*>(node->data)};
+ if (change->event_mask & QOF_EVENT_DESTROY)
+ {
+ PWARN ("Stock account destroyed, cancelling assistant.");
+ auto controller = static_cast<StockAssistantController*>(user_data);
+ gnc_close_gui_component_by_data(ASSISTANT_STOCK_TRANSACTION_CM_CLASS, controller);
+ }
}
+ g_list_free (list);
}
static void
commit ee84938276bf90c63e46d5b7e21132019671890f
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Sep 18 13:52:12 2023 -0700
[stock-txn-asst] Reset entry amount/value to GNC_ERROR_ARG.
When the entry has been set to a number and is later unset.
diff --git a/gnucash/gnome/assistant-stock-transaction.cpp b/gnucash/gnome/assistant-stock-transaction.cpp
index d4215c493c..47e3c71156 100644
--- a/gnucash/gnome/assistant-stock-transaction.cpp
+++ b/gnucash/gnome/assistant-stock-transaction.cpp
@@ -631,7 +631,10 @@ void
StockTransactionEntry::set_value(gnc_numeric amount)
{
if (gnc_numeric_check (amount))
+ {
+ m_value = gnc_numeric_error(GNC_ERROR_ARG);
return;
+ }
if (gnc_numeric_negative_p (amount))
{
@@ -794,7 +797,10 @@ void
StockTransactionStockEntry::set_amount(gnc_numeric amount)
{
if (!m_amount_enabled || gnc_numeric_check(amount))
- return;
+ {
+ m_amount = gnc_numeric_error(GNC_ERROR_ARG);
+ return;
+ }
if (m_input_new_balance)
{
commit 63f1b305caee9a0b67dad022b51a2d12bfee8cf7
Author: John Ralls <jralls at ceridwen.us>
Date: Mon Sep 18 11:47:15 2023 -0700
[stock-txn-asst] Fix exception converting GNC_ERROR_ARG to GncNumeric.
diff --git a/gnucash/gnome/assistant-stock-transaction.cpp b/gnucash/gnome/assistant-stock-transaction.cpp
index a3de8994d3..d4215c493c 100644
--- a/gnucash/gnome/assistant-stock-transaction.cpp
+++ b/gnucash/gnome/assistant-stock-transaction.cpp
@@ -556,7 +556,7 @@ public:
virtual void set_memo(const char* memo) { m_memo = memo; }
virtual const char* memo() const { return m_memo; }
virtual void set_value(gnc_numeric amount);
- virtual GncNumeric value() { return GncNumeric(m_value); }
+ virtual GncNumeric value() { return (gnc_numeric_check(m_value) ? GncNumeric{} : GncNumeric(m_value)); }
virtual void set_amount(gnc_numeric) {}
virtual gnc_numeric amount() const { return m_value; }
virtual bool has_amount() const { return false; }
Summary of changes:
gnucash/gnome/assistant-stock-transaction.cpp | 30 ++++++++++++++++-----------
1 file changed, 18 insertions(+), 12 deletions(-)
More information about the gnucash-changes
mailing list