From 9c06582029b2e863de507ae4c954e2f9791f7700 Mon Sep 17 00:00:00 2001 From: ehouse Date: Fri, 1 Sep 2006 04:32:57 +0000 Subject: [PATCH] bug fix: reset stack data stream before getting length and writing. Assert so easier to catch similar problems. --- common/memstream.c | 1 + common/movestak.c | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/common/memstream.c b/common/memstream.c index 53d8db386..7f93195cb 100644 --- a/common/memstream.c +++ b/common/memstream.c @@ -143,6 +143,7 @@ getOneBit( MemStreamCtxt* stream ) if ( stream->nReadBits == 0 ) { ++stream->curReadPos; } + XP_ASSERT( stream->curReadPos <= stream->nBytesWritten ); rack = stream->buf[stream->curReadPos-1]; mask = 1 << stream->nReadBits++; diff --git a/common/movestak.c b/common/movestak.c index 7672e0b38..6c332b3fe 100644 --- a/common/movestak.c +++ b/common/movestak.c @@ -110,7 +110,16 @@ stack_loadFromStream( StackCtxt* stack, XWStreamCtxt* stream ) void stack_writeToStream( StackCtxt* stack, XWStreamCtxt* stream ) { - XP_U16 nBytes = !!stack->data? stream_getSize( stack->data ): 0; + XP_U16 nBytes; + XWStreamCtxt* data = stack->data; + XWStreamPos oldPos = START_OF_STREAM; + + if ( !!data ) { + oldPos = stream_setPos( data, START_OF_STREAM, POS_READ ); + nBytes = stream_getSize( data ); + } else { + nBytes = 0; + } stream_putU16( stream, nBytes ); @@ -119,8 +128,13 @@ stack_writeToStream( StackCtxt* stack, XWStreamCtxt* stream ) stream_putU16( stream, stack->nEntries ); stream_putU32( stream, stack->top ); - stream_setPos( stack->data, START_OF_STREAM, POS_READ ); - stream_copyFromStream( stream, stack->data, nBytes ); + stream_setPos( data, START_OF_STREAM, POS_READ ); + stream_copyFromStream( stream, data, nBytes ); + } + + if ( !!data ) { + /* in case it'll be used further */ + (void)stream_setPos( data, oldPos, POS_READ ); } } /* stack_writeToStream */