[Libreoffice-commits] .: package/source
Caolán McNamara
caolan at kemper.freedesktop.org
Thu Nov 25 08:47:14 PST 2010
package/source/zipapi/ZipFile.cxx | 45 ++++++++++++++++++++++----------------
1 file changed, 27 insertions(+), 18 deletions(-)
New commits:
commit 047a986e3af855cdb4c27274da5a10fb5da37fb6
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Nov 25 16:46:43 2010 +0000
Resolves: rhbz#656191 Catch bad alloc and convert to ZipIOException
diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx
index 7768470..0cfb519 100644
--- a/package/source/zipapi/ZipFile.cxx
+++ b/package/source/zipapi/ZipFile.cxx
@@ -638,29 +638,38 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry )
aGrabber >> nExtraLen;
rEntry.nOffset = static_cast < sal_Int32 > (aGrabber.getPosition()) + nPathLen + nExtraLen;
- // read always in UTF8, some tools seem not to set UTF8 bit
- uno::Sequence < sal_Int8 > aNameBuffer( nPathLen );
- sal_Int32 nRead = aGrabber.readBytes( aNameBuffer, nPathLen );
- if ( nRead < aNameBuffer.getLength() )
- aNameBuffer.realloc( nRead );
+ sal_Bool bBroken = sal_False;
- ::rtl::OUString sLOCPath = rtl::OUString::intern( (sal_Char *) aNameBuffer.getArray(),
- aNameBuffer.getLength(),
- RTL_TEXTENCODING_UTF8 );
+ try
+ {
+ // read always in UTF8, some tools seem not to set UTF8 bit
+ uno::Sequence < sal_Int8 > aNameBuffer( nPathLen );
+ sal_Int32 nRead = aGrabber.readBytes( aNameBuffer, nPathLen );
+ if ( nRead < aNameBuffer.getLength() )
+ aNameBuffer.realloc( nRead );
+
+ ::rtl::OUString sLOCPath = rtl::OUString::intern( (sal_Char *) aNameBuffer.getArray(),
+ aNameBuffer.getLength(),
+ RTL_TEXTENCODING_UTF8 );
+
+ if ( rEntry.nPathLen == -1 ) // the file was created
+ {
+ rEntry.nPathLen = nPathLen;
+ rEntry.sPath = sLOCPath;
+ }
- if ( rEntry.nPathLen == -1 ) // the file was created
+ // the method can be reset for internal use so it is not checked
+ bBroken = rEntry.nVersion != nVersion
+ || rEntry.nFlag != nFlag
+ || rEntry.nTime != nTime
+ || rEntry.nPathLen != nPathLen
+ || !rEntry.sPath.equals( sLOCPath );
+ }
+ catch(::std::bad_alloc &)
{
- rEntry.nPathLen = nPathLen;
- rEntry.sPath = sLOCPath;
+ bBroken = sal_True;
}
- // the method can be reset for internal use so it is not checked
- sal_Bool bBroken = rEntry.nVersion != nVersion
- || rEntry.nFlag != nFlag
- || rEntry.nTime != nTime
- || rEntry.nPathLen != nPathLen
- || !rEntry.sPath.equals( sLOCPath );
-
if ( bBroken && !bRecoveryMode )
throw ZipIOException( OUString( RTL_CONSTASCII_USTRINGPARAM( "The stream seems to be broken!" ) ),
Reference< XInterface >() );
More information about the Libreoffice-commits
mailing list