mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 799423 - Crash when creating ETF transaction
Don't keep the old split if it's a trading split. The balance code regenerates those, invalidating the pointer.
This commit is contained in:
parent
711554ecd5
commit
5c5b627cb1
@ -364,6 +364,12 @@ gnc_split_register_check_account (SplitRegister *reg,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
is_trading_split (Split* split)
|
||||||
|
{
|
||||||
|
return xaccAccountGetType (xaccSplitGetAccount (split)) == ACCT_TYPE_TRADING;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_split_register_move_cursor (VirtualLocation *p_new_virt_loc,
|
gnc_split_register_move_cursor (VirtualLocation *p_new_virt_loc,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
@ -374,10 +380,10 @@ gnc_split_register_move_cursor (VirtualLocation *p_new_virt_loc,
|
|||||||
Transaction *pending_trans;
|
Transaction *pending_trans;
|
||||||
Transaction *new_trans;
|
Transaction *new_trans;
|
||||||
Transaction *old_trans;
|
Transaction *old_trans;
|
||||||
Split *old_trans_split;
|
Split *old_trans_split{nullptr};
|
||||||
Split *new_trans_split;
|
Split *new_trans_split;
|
||||||
Split *new_split;
|
Split *new_split;
|
||||||
Split *old_split;
|
Split *old_split{nullptr};
|
||||||
CursorClass new_class;
|
CursorClass new_class;
|
||||||
CursorClass old_class;
|
CursorClass old_class;
|
||||||
gboolean exact_traversal;
|
gboolean exact_traversal;
|
||||||
@ -399,10 +405,13 @@ gnc_split_register_move_cursor (VirtualLocation *p_new_virt_loc,
|
|||||||
info = gnc_split_register_get_info (reg);
|
info = gnc_split_register_get_info (reg);
|
||||||
|
|
||||||
/* The transaction we are coming from */
|
/* The transaction we are coming from */
|
||||||
old_split = gnc_split_register_get_current_split (reg);
|
if (auto s{gnc_split_register_get_current_split (reg)}; !is_trading_split(s))
|
||||||
|
old_split = s;
|
||||||
old_trans = gnc_split_register_get_current_trans (reg);
|
old_trans = gnc_split_register_get_current_trans (reg);
|
||||||
old_trans_split =
|
if (auto s{gnc_split_register_get_current_trans_split (reg, &old_trans_split_loc)};
|
||||||
gnc_split_register_get_current_trans_split (reg, &old_trans_split_loc);
|
is_trading_split(s))
|
||||||
|
old_trans_split = s;
|
||||||
|
|
||||||
old_class = gnc_split_register_get_current_cursor_class (reg);
|
old_class = gnc_split_register_get_current_cursor_class (reg);
|
||||||
|
|
||||||
exact_traversal = info->exact_traversal;
|
exact_traversal = info->exact_traversal;
|
||||||
|
Loading…
Reference in New Issue
Block a user