Index: source/filter/WordPerfectImportFilter.cxx =================================================================== RCS file: /cvs/sw/writerperfect/source/filter/WordPerfectImportFilter.cxx,v retrieving revision 1.3.2.1 diff -u -r1.3.2.1 WordPerfectImportFilter.cxx Index: source/stream/WPXSvStream.cxx =================================================================== RCS file: /cvs/sw/writerperfect/source/stream/WPXSvStream.cxx,v retrieving revision 1.3.2.2 diff -u -r1.3.2.2 WPXSvStream.cxx --- source/stream/WPXSvStream.cxx 8 Feb 2005 15:27:59 -0000 1.3.2.2 +++ source/stream/WPXSvStream.cxx 3 Mar 2005 15:14:32 -0000 @@ -18,11 +18,27 @@ mxStream(xStream), mnOffset(0) { - Reference < XSeekable> xSeekable = Reference < XSeekable > (xStream, UNO_QUERY); - if (!xSeekable.is()) + if (!xStream.is()) + { mnLength = 0; + } else - mnLength = xSeekable->getLength(); // exception + { + Reference < XSeekable> xSeekable = Reference < XSeekable > (xStream, UNO_QUERY); + if (!xSeekable.is()) + mnLength = 0; + else + { + try + { + mnLength = xSeekable->getLength(); // exception + } + catch ( ... ) + { + mnLength = 0; + } + } + } } WPXSvInputStream::~WPXSvInputStream() @@ -42,9 +58,14 @@ { if (seekType == WPX_SEEK_CUR && offset >= 0) { - mxStream->skipBytes (offset); // exception ? - mnOffset += offset; - return FALSE; + if (mnOffset + offset <= mnLength) + { + mxStream->skipBytes (offset); // exception ? + mnOffset += offset; + return FALSE; + } + else + return TRUE; } Reference < XSeekable> xSeekable = Reference < XSeekable >(mxStream, UNO_QUERY); @@ -56,6 +77,9 @@ else mnOffset = offset; + if (mnOffset > mnLength) + return TRUE; + xSeekable->seek(mnOffset); // FIXME: catch exception! return FALSE; @@ -94,6 +118,9 @@ rtl::OUString::createFromAscii( "PerfectOffice_MAIN" ), STREAM_STD_READ ); + if ( !mxChildStream.Is() || mxChildStream->GetError() ) + return NULL; + Reference < XInputStream > xContents = new utl::OSeekableInputStreamWrapper( mxChildStream ); if (xContents.is()) return new WPXSvInputStream( xContents );