segfault on customer report
will Snow
wsnow at gmx.com
Mon Apr 25 06:15:56 EDT 2016
Hi All,
After running Reports -> business -> customer report gnucash has a
segfault (git master branch c739f4fae442e583389dd8c47100a38a06aac4c4)
I'm interested in helping out with gnucash so looked a bit further. It
looks as though the segfault occurs when the get_slot method is run
because the book variable is empty.
src/libqof/qof/qofbook.cpp
1194 KvpValue*
1195 qof_book_get_option (QofBook *book, GSList *path)
1196 {
1197 KvpFrame *root = qof_instance_get_slots(QOF_INSTANCE (book));
1198 Path path_v {KVP_OPTION_PATH};
1199 for (auto item = path; item != nullptr; item =
g_slist_next(item))
1200 path_v.push_back(static_cast<const char*>(item->data));
1201 return root->get_slot(path_v);
1202 }
After looking a bit deeper it seems that SWIG_MustGetPtr (see below)
returns null to arg1 (book) which is then passed to qof_book_get_option
resulting in qof_instance_get_slots returning null instead of an object
and then it segfaults when trying to run get_slots.
I thought adding some sort of check on the root variable but that's
probably wrong and not solving the underlying problem? I'm not sure
where to go from here with regards to fixing the issue. Any pointers
would be helpful. Thanks.
./src/engine/swig-engine.c
static SCM
_wrap_qof_book_get_option (SCM s_0, SCM s_1)
{
#define FUNC_NAME "qof-book-get-option"
QofBook *arg1 = (QofBook *) 0 ;
GSList *arg2 = (GSList *) 0 ;
SCM gswig_result;
SWIGUNUSED int gswig_list_p = 0;
KvpValue *result = 0 ;
{
arg1 = (QofBook *)SWIG_MustGetPtr(s_0, SWIGTYPE_p_QofBook, 1, 0);
}
arg2 = gnc_scm_to_gslist_string(s_1);
result = (KvpValue *)qof_book_get_option(arg1,arg2);
gswig_result = gnc_kvp_value_ptr_to_scm(result);
return gswig_result;
#undef FUNC_NAME
More information about the gnucash-devel
mailing list