r18848 - gnucash/trunk/src/backend/sql - Fix bug 611885 - Crash when opening postgresql file

Phil Longstaff plongstaff at code.gnucash.org
Sat Mar 6 05:40:53 EST 2010


Author: plongstaff
Date: 2010-03-06 05:40:53 -0500 (Sat, 06 Mar 2010)
New Revision: 18848
Trac: http://svn.gnucash.org/trac/changeset/18848

Modified:
   gnucash/trunk/src/backend/sql/gnc-backend-sql.c
Log:
Fix bug 611885 - Crash when opening postgresql file

Previous work setting Timespec values via gobject properties missed the case where the timespec loaded from the database was NULL.


Modified: gnucash/trunk/src/backend/sql/gnc-backend-sql.c
===================================================================
--- gnucash/trunk/src/backend/sql/gnc-backend-sql.c	2010-03-05 20:46:35 UTC (rev 18847)
+++ gnucash/trunk/src/backend/sql/gnc-backend-sql.c	2010-03-06 10:40:53 UTC (rev 18848)
@@ -1609,6 +1609,7 @@
     const GValue* val;
     Timespec ts = {0, 0};
 	TimespecSetterFunc ts_setter;
+    gboolean isOK = FALSE;
 
 	g_return_if_fail( be != NULL );
 	g_return_if_fail( row != NULL );
@@ -1619,7 +1620,7 @@
 	ts_setter = (TimespecSetterFunc)setter;
     val = gnc_sql_row_get_value_at_col_name( row, table_row->col_name );
     if( val == NULL ) {
-        (*ts_setter)( pObject, ts );
+        isOK = TRUE;
     } else {
 		if( G_VALUE_HOLDS_STRING( val ) ) {
 			const gchar* s = g_value_get_string( val );
@@ -1633,18 +1634,21 @@
 									    s[10], s[11],
 									    s[12], s[13] );
 		        ts = gnc_iso8601_to_timespec_gmt( buf );
-				if (table_row->gobj_param_name != NULL) {
-			        g_object_set( pObject, table_row->gobj_param_name, &ts, NULL );
-				} else {
-			        (*ts_setter)( pObject, ts );
-				}
 			    g_free( buf );
+                isOK = TRUE;
 		    }
 
 		} else {
 			PWARN( "Unknown timespec type: %s", G_VALUE_TYPE_NAME( val ) );
         }
     }
+    if( isOK ) {
+		if (table_row->gobj_param_name != NULL) {
+			g_object_set( pObject, table_row->gobj_param_name, &ts, NULL );
+		} else {
+			(*ts_setter)( pObject, ts );
+		}
+    }
 }
 
 static void



More information about the gnucash-changes mailing list