[Gnucash-changes] Fix double free of the targetList,
Add kvp_value_to_bare_string
Neil Williams
codehelp at cvs.gnucash.org
Sun Feb 20 10:53:03 EST 2005
Log Message:
-----------
Fix double free of the targetList, Add kvp_value_to_bare_string
Modified Files:
--------------
gnucash:
ChangeLog
gnucash/src/engine:
kvp_frame.c
kvp_frame.h
qof_book_merge.c
qofsession.c
qofsession.h
Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1893
retrieving revision 1.1894
diff -LChangeLog -LChangeLog -u -r1.1893 -r1.1894
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,16 @@
+2005-02-20 Neil Williams <linux at codehelp.co.uk>
+ * src/engine/qof_book_merge.c: Fix double free of the targetList
+ entities that cause xaccGroupGetNumSubAccounts to generate a
+ segmentation fault.
+ * src/engine/kvp_frame.c:
+ * src/engine/kvp_frame.h:
+ Add kvp_value_to_bare_string to
+ generate strings without debug information.
+ * src/engine/qofsession.h:
+ * src/engine/qofsession.c:
+ Documentation tweaks to bring them into line with QOF and the
+ gnucash-gnome2-dev branch.
+
2005-02-16 Derek Atkins <derek at ihtfp.com>
* src/gnome-utils/dialog-utils.c: When trying to load the symbol
Index: qof_book_merge.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qof_book_merge.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsrc/engine/qof_book_merge.c -Lsrc/engine/qof_book_merge.c -u -r1.4 -r1.5
--- src/engine/qof_book_merge.c
+++ src/engine/qof_book_merge.c
@@ -104,10 +104,6 @@
}
mergeData->mergeList = g_list_next(mergeData->mergeList);
}
- while(mergeData->targetList != NULL) {
- g_free(mergeData->targetList->data);
- mergeData->targetList = g_slist_next(mergeData->targetList);
- }
g_list_free(mergeData->mergeList);
g_slist_free(mergeData->mergeObjectParams);
g_slist_free(mergeData->targetList);
@@ -286,10 +282,6 @@
g_slist_free(currentRule->linkedEntList);
mergeData->mergeList = g_list_next(mergeData->mergeList);
}
- while(mergeData->targetList != NULL) {
- g_free(mergeData->targetList->data);
- mergeData->targetList = g_slist_next(mergeData->targetList);
- }
g_list_free(mergeData->mergeList);
g_slist_free(mergeData->mergeObjectParams);
g_slist_free(mergeData->targetList);
Index: kvp_frame.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/kvp_frame.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -Lsrc/engine/kvp_frame.c -Lsrc/engine/kvp_frame.c -u -r1.42 -r1.43
--- src/engine/kvp_frame.c
+++ src/engine/kvp_frame.c
@@ -496,8 +496,9 @@
KvpValue * new_value)
{
KvpValue * old_value;
- char *last_key = NULL;
+ char *last_key;
+ last_key = NULL;
if (new_value)
{
frame = get_trailer_make (frame, key_path, &last_key);
@@ -1636,6 +1637,81 @@
}
gchar*
+kvp_value_to_bare_string(const KvpValue *val)
+{
+ gchar *tmp1;
+ gchar *tmp2;
+ const gchar *ctmp;
+
+ g_return_val_if_fail(val, NULL);
+
+ switch(kvp_value_get_type(val))
+ {
+ case KVP_TYPE_GINT64:
+ return g_strdup_printf("%lld",(long long int) kvp_value_get_gint64(val));
+ break;
+
+ case KVP_TYPE_DOUBLE:
+ return g_strdup_printf("(%g)", kvp_value_get_double(val));
+ break;
+
+ case KVP_TYPE_NUMERIC:
+ tmp1 = gnc_numeric_to_string(kvp_value_get_numeric(val));
+ tmp2 = g_strdup_printf("%s", tmp1 ? tmp1 : "");
+ g_free(tmp1);
+ return tmp2;
+ break;
+
+ case KVP_TYPE_STRING:
+ tmp1 = kvp_value_get_string (val);
+ return g_strdup_printf("%s", tmp1 ? tmp1 : "");
+ break;
+
+ case KVP_TYPE_GUID:
+ ctmp = guid_to_string(kvp_value_get_guid(val));
+ tmp2 = g_strdup_printf("%s", ctmp ? ctmp : "");
+ return tmp2;
+ break;
+
+ case KVP_TYPE_TIMESPEC:
+ tmp1 = g_new0 (char, 40);
+ gnc_timespec_to_iso8601_buff (kvp_value_get_timespec (val), tmp1);
+ tmp2 = g_strdup_printf("%s", tmp1);
+ g_free(tmp1);
+ return tmp2;
+ break;
+
+ case KVP_TYPE_BINARY:
+ {
+ guint64 len;
+ void *data;
+ data = kvp_value_get_binary(val, &len);
+ tmp1 = binary_to_string(data, len);
+ return g_strdup_printf("%s", tmp1 ? tmp1 : "");
+ }
+ break;
+
+ case KVP_TYPE_GLIST:
+ tmp1 = kvp_value_glist_to_string(kvp_value_get_glist(val));
+ tmp2 = g_strdup_printf("%s", tmp1 ? tmp1 : "");
+ g_free(tmp1);
+ return tmp2;
+ break;
+
+ case KVP_TYPE_FRAME:
+ tmp1 = kvp_frame_to_string(kvp_value_get_frame(val));
+ tmp2 = g_strdup_printf("%s", tmp1 ? tmp1 : "");
+ g_free(tmp1);
+ return tmp2;
+ break;
+
+ default:
+ return g_strdup_printf(" ");
+ break;
+ }
+}
+
+gchar*
kvp_value_to_string(const KvpValue *val)
{
gchar *tmp1;
Index: qofsession.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsession.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -Lsrc/engine/qofsession.c -Lsrc/engine/qofsession.c -u -r1.16 -r1.17
--- src/engine/qofsession.c
+++ src/engine/qofsession.c
@@ -269,8 +269,6 @@
return session->book_id;
}
-/* ====================================================================== */
-
#ifdef GNUCASH_MAJOR_VERSION
static void
@@ -469,7 +467,7 @@
/* destroy the old backend */
qof_session_destroy_backend(session);
- /* Look for somthing of the form of "file:/", "http://" or
+ /* Look for something of the form of "file:/", "http://" or
* "postgres://". Everything before the colon is the access
* method. Load the first backend found for that access method.
*/
Index: kvp_frame.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/kvp_frame.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -Lsrc/engine/kvp_frame.h -Lsrc/engine/kvp_frame.h -u -r1.36 -r1.37
--- src/engine/kvp_frame.h
+++ src/engine/kvp_frame.h
@@ -603,7 +603,17 @@
/*@}*/
+/** \brief General purpose function to convert any KvpValue to a string.
+Only the bare string is returned, there is no debugging information.
+*/
+gchar* kvp_value_to_bare_string(const KvpValue *val);
+
+/** \brief Debug version of kvp_value_to_string
+
+This version is used only by ::qof_query_printValueForParam,
+itself a debugging and development utility function.
+*/
gchar* kvp_value_to_string(const KvpValue *val);
/** Manipulator:
Index: qofsession.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsession.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -Lsrc/engine/qofsession.h -Lsrc/engine/qofsession.h -u -r1.9 -r1.10
--- src/engine/qofsession.h
+++ src/engine/qofsession.h
@@ -92,7 +92,6 @@
/* PROTOTYPES ******************************************************/
-/** QofSession definition */
typedef struct _QofSession QofSession;
QofSession * qof_session_new (void);
More information about the gnucash-changes
mailing list