From 6fc882c0064facc4bcd4b054d33fa9c33969758a Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 20 Mar 2006 22:16:32 +0000 Subject: Fix [Bug 1380427] with [Patch 1391939] --- ChangeLog | 12 +++++++++--- generic/tkUndo.c | 36 ++++++++---------------------------- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0520942..00d6421 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,15 @@ +2006-03-20 Donal K. Fellows + + * generic/tkUndo.c (TkUndoSetDepth): Fix a crash in the undo stack + code. [Bug 1380427, Patch 1391939] Thanks to for + reporting and Ludwig Callewaert for the fix. + 2006-03-17 Pat Thoyts * library/clrpick.tcl: bug #1451587: avoid using abbreviated - * library/palette.tcl: sub-commands in core scripts as this - * library/scale.tcl: can cause problems with mega-widget - * library/scrlbar.tcl: libraries like snit. + * library/palette.tcl: sub-commands in core scripts as this can + * library/scale.tcl: cause problems with mega-widget libraries + * library/scrlbar.tcl: like snit. * library/tkfbox.tcl: * library/xmfbox.tcl: diff --git a/generic/tkUndo.c b/generic/tkUndo.c index c860021..cbb3fac 100644 --- a/generic/tkUndo.c +++ b/generic/tkUndo.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkUndo.c,v 1.1.4.1 2004/07/14 19:07:48 hobbs Exp $ + * RCS: @(#) $Id: tkUndo.c,v 1.1.4.2 2006/03/20 22:16:34 dkf Exp $ */ #include "tkUndo.h" @@ -190,12 +190,15 @@ void TkUndoSetDepth ( stack, maxdepth ) stack->maxdepth = maxdepth; if ((stack->maxdepth > 0) && (stack->depth > stack->maxdepth)) { - /* Maximum stack depth exceeded. We have to remove the last compound - elements on the stack */ + /* + * Maximum stack depth exceeded. We have to remove the last compound + * elements on the stack. + */ + elem = stack->undoStack; prevelem = NULL; - while ( sepNumber <= stack->maxdepth ) { - if (elem != NULL && (elem->type == TK_UNDO_SEPARATOR) ) { + while (elem && (sepNumber <= stack->maxdepth)) { + if (elem->type == TK_UNDO_SEPARATOR) { sepNumber++; } prevelem = elem; @@ -268,32 +271,9 @@ void TkUndoFreeStack ( stack ) void TkUndoInsertUndoSeparator ( stack ) TkUndoRedoStack * stack; { -/* TkUndoAtom * elem; - TkUndoAtom * prevelem; - int sepNumber = 0; -*/ - if ( TkUndoInsertSeparator(&(stack->undoStack)) ) { ++(stack->depth); TkUndoSetDepth(stack,stack->maxdepth); -/* if ((stack->maxdepth > 0) && (stack->depth > stack->maxdepth)) { - elem = stack->undoStack; - prevelem = NULL; - while ( sepNumber < stack->depth ) { - if (elem != NULL && (elem->type == TK_UNDO_SEPARATOR) ) { - sepNumber++; - } - prevelem = elem; - elem = elem->next; - } - prevelem->next = NULL; - while ( elem ) { - prevelem = elem; - elem = elem->next; - ckfree((char *) elem); - } - stack->depth; - } */ } } -- cgit v0.12