r4144 - trunk/bse



Author: timj
Date: 2006-12-12 19:15:32 -0500 (Tue, 12 Dec 2006)
New Revision: 4144

Modified:
   trunk/bse/ChangeLog
   trunk/bse/bseundostack.c
Log:
Tue Dec 12 08:50:45 2006  Tim Janik  <timj gtk org>

        * bseundostack.c: fix possible flat copies of pointers to deeply
        nested object structures. in particular, this fixes potential GSList
        node corruptions.




Modified: trunk/bse/ChangeLog
===================================================================
--- trunk/bse/ChangeLog	2006-12-12 01:09:01 UTC (rev 4143)
+++ trunk/bse/ChangeLog	2006-12-13 00:15:32 UTC (rev 4144)
@@ -1,3 +1,9 @@
+Tue Dec 12 08:50:45 2006  Tim Janik  <timj gtk org>
+
+	* bseundostack.c: fix possible flat copies of pointers to deeply
+	nested object structures. in particular, this fixes potential GSList
+	node corruptions.
+
 Tue Dec 12 01:18:22 2006  Tim Janik  <timj gtk org>
 
 	* bsecore.idl, bsemathsignal.c: added musical tuning system tables 

Modified: trunk/bse/bseundostack.c
===================================================================
--- trunk/bse/bseundostack.c	2006-12-12 01:09:01 UTC (rev 4143)
+++ trunk/bse/bseundostack.c	2006-12-13 00:15:32 UTC (rev 4144)
@@ -23,33 +23,19 @@
 static SFI_MSG_TYPE_DEFINE (debug_undo, "undo", SFI_MSG_DEBUG, NULL);
 #define DEBUG(...)      sfi_debug (debug_undo, __VA_ARGS__)
 
-/* --- variables --- */
-static BseUndoStack *dummy_ustack = NULL;
-
-
 /* --- functions --- */
 BseUndoStack*
 bse_undo_stack_dummy (void)
 {
+  static BseUndoStack *dummy_ustack = NULL;
   if (!dummy_ustack)
     {
       dummy_ustack = g_new0 (BseUndoStack, 1);
-      dummy_ustack->project = NULL;
-      dummy_ustack->notify = NULL;
-      dummy_ustack->max_steps = 0;
       dummy_ustack->ignore_steps = 0x77777777; /* dummy specific value */
-      dummy_ustack->n_open_groups = 0;
-      dummy_ustack->group = NULL;
-      dummy_ustack->debug_names = NULL;
-      dummy_ustack->n_undo_groups = 0;
-      dummy_ustack->undo_groups = NULL;
-      dummy_ustack->dirt_counter = 0;
-      dummy_ustack->n_merge_requests = 0;
-      dummy_ustack->merge_name = NULL;
-      dummy_ustack->merge_next = FALSE;
     }
   return dummy_ustack;
 }
+#define IS_DUMMY_USTACK(ust)    ((ust) == bse_undo_stack_dummy())
 
 BseUndoStack*
 bse_undo_stack_new (BseProject   *project,
@@ -59,7 +45,7 @@
 
   g_return_val_if_fail (BSE_IS_PROJECT (project), NULL);
 
-  self = g_memdup (bse_undo_stack_dummy (), sizeof (*self));
+  self = g_new0 (BseUndoStack, 1);
   self->ignore_steps = 0; /* reset dummy specific value */
   self->project = project;
   self->notify = notify;
@@ -402,7 +388,7 @@
     return NULL;
   g_return_val_if_fail (BSE_IS_ITEM (item), NULL);
 
-  if (ustack == dummy_ustack)
+  if (IS_DUMMY_USTACK (ustack))
     return NULL;
 
   project = bse_item_get_project (item);
@@ -426,7 +412,7 @@
   if (!packed_pointer)
     return NULL;
 
-  if (ustack == dummy_ustack)
+  if (IS_DUMMY_USTACK (ustack))
     return NULL;
 
   if (packed_pointer[0] == 002 && strcmp (packed_pointer, "\002project\003") == 0)




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]