[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - filter/qa filter/source
Caolán McNamara
caolanm at redhat.com
Fri Jul 17 05:16:50 PDT 2015
filter/qa/cppunit/data/eps/fail/short-1.eps |binary
filter/source/graphicfilter/ieps/ieps.cxx | 249 ++++++++++++++--------------
2 files changed, 125 insertions(+), 124 deletions(-)
New commits:
commit 74f07db7bd42929fad5daa9240ecf3244ebae8c0
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jul 16 16:44:16 2015 +0100
min size of eps for a preview is 32
(cherry picked from commit bf02304a0ea4771e01f39dd0032cbf276997ca00)
+
V668 no sense in testing the result of new against null
cherry-picked from
commit 556373c41fddbac6cbee1c89e7707631270a1852
Author: Caolán McNamara <caolanm at redhat.com>
Date: Wed Mar 11 09:06:08 2015 +0000
V668 no sense in testing the result of new against null
in order to merge simply
Change-Id: Icb82d9dd0a3918f2bdc4cb768c566774cd0d8ac4
Reviewed-on: https://gerrit.libreoffice.org/17133
Reviewed-by: David Tardon <dtardon at redhat.com>
Tested-by: David Tardon <dtardon at redhat.com>
diff --git a/filter/qa/cppunit/data/eps/fail/short-1.eps b/filter/qa/cppunit/data/eps/fail/short-1.eps
new file mode 100644
index 0000000..4b38b78
Binary files /dev/null and b/filter/qa/cppunit/data/eps/fail/short-1.eps differ
diff --git a/filter/source/graphicfilter/ieps/ieps.cxx b/filter/source/graphicfilter/ieps/ieps.cxx
index d70e471..12f9247 100644
--- a/filter/source/graphicfilter/ieps/ieps.cxx
+++ b/filter/source/graphicfilter/ieps/ieps.cxx
@@ -52,7 +52,7 @@ class FilterConfigItem;
|*
*************************************************************************/
-static sal_uInt8* ImplSearchEntry( sal_uInt8* pSource, sal_uInt8* pDest, sal_uLong nComp, sal_uLong nSize )
+static sal_uInt8* ImplSearchEntry( sal_uInt8* pSource, sal_uInt8 const * pDest, sal_uLong nComp, sal_uLong nSize )
{
while ( nComp-- >= nSize )
{
@@ -71,7 +71,7 @@ static sal_uInt8* ImplSearchEntry( sal_uInt8* pSource, sal_uInt8* pDest, sal_uLo
// SecurityCount is the buffersize of the buffer in which we will parse for a number
-static long ImplGetNumber( sal_uInt8 **pBuf, int& nSecurityCount )
+static long ImplGetNumber( sal_uInt8 **pBuf, sal_uInt32& nSecurityCount )
{
bool bValid = true;
bool bNegative = false;
@@ -504,7 +504,7 @@ void MakePreview(sal_uInt8* pBuf, sal_uInt32 nBytesRead,
if ( pDest )
{
pDest += 16;
- int nCount = 4;
+ sal_uInt32 nCount = 4;
long nNumber = ImplGetNumber( &pDest, nCount );
if ( nCount && ( (sal_uInt32)nNumber < 10 ) )
{
@@ -595,162 +595,163 @@ GraphicImport( SvStream & rStream, Graphic & rGraphic, FilterConfigItem* )
{
rStream.Seek( nPSStreamPos );
sal_uInt8* pBuf = new sal_uInt8[ nPSSize ];
- if ( pBuf )
+
+ sal_uInt32 nBufStartPos = rStream.Tell();
+ sal_uInt32 nBytesRead = rStream.Read( pBuf, nPSSize );
+ if ( nBytesRead == nPSSize )
{
- sal_uInt32 nBufStartPos = rStream.Tell();
- sal_uInt32 nBytesRead = rStream.Read( pBuf, nPSSize );
- if ( nBytesRead == nPSSize )
+ sal_uInt32 nSecurityCount = 32;
+ // if there is no tiff/wmf preview, we will parse for an preview in
+ // the eps prolog
+ if (!bHasPreview && nBytesRead >= nSecurityCount)
{
- int nSecurityCount = 32;
- if ( !bHasPreview ) // if there is no tiff/wmf preview, we will parse for an preview in the eps prolog
+ sal_uInt8* pDest = ImplSearchEntry( pBuf, reinterpret_cast<sal_uInt8 const *>("%%BeginPreview:"), nBytesRead - nSecurityCount, 15 );
+ if ( pDest )
{
- sal_uInt8* pDest = ImplSearchEntry( pBuf, (sal_uInt8*)"%%BeginPreview:", nBytesRead - 32, 15 );
- if ( pDest )
+ pDest += 15;
+ long nWidth = ImplGetNumber( &pDest, nSecurityCount );
+ long nHeight = ImplGetNumber( &pDest, nSecurityCount );
+ long nBitDepth = ImplGetNumber( &pDest, nSecurityCount );
+ long nScanLines = ImplGetNumber( &pDest, nSecurityCount );
+ pDest = ImplSearchEntry( pDest, (sal_uInt8*)"%", 16, 1 ); // go to the first Scanline
+ if ( nSecurityCount && pDest && nWidth && nHeight && ( ( nBitDepth == 1 ) || ( nBitDepth == 8 ) ) && nScanLines )
{
- pDest += 15;
- long nWidth = ImplGetNumber( &pDest, nSecurityCount );
- long nHeight = ImplGetNumber( &pDest, nSecurityCount );
- long nBitDepth = ImplGetNumber( &pDest, nSecurityCount );
- long nScanLines = ImplGetNumber( &pDest, nSecurityCount );
- pDest = ImplSearchEntry( pDest, (sal_uInt8*)"%", 16, 1 ); // go to the first Scanline
- if ( nSecurityCount && pDest && nWidth && nHeight && ( ( nBitDepth == 1 ) || ( nBitDepth == 8 ) ) && nScanLines )
- {
- rStream.Seek( nBufStartPos + ( pDest - pBuf ) );
+ rStream.Seek( nBufStartPos + ( pDest - pBuf ) );
- Bitmap aBitmap( Size( nWidth, nHeight ), 1 );
- BitmapWriteAccess* pAcc = aBitmap.AcquireWriteAccess();
- if ( pAcc )
+ Bitmap aBitmap( Size( nWidth, nHeight ), 1 );
+ BitmapWriteAccess* pAcc = aBitmap.AcquireWriteAccess();
+ if ( pAcc )
+ {
+ int nBitsLeft;
+ bool bIsValid = true;
+ sal_uInt8 nDat = 0;
+ char nByte;
+ for ( long y = 0; bIsValid && ( y < nHeight ); y++ )
{
- int nBitsLeft;
- bool bIsValid = true;
- sal_uInt8 nDat = 0;
- char nByte;
- for ( long y = 0; bIsValid && ( y < nHeight ); y++ )
+ nBitsLeft = 0;
+ for ( long x = 0; x < nWidth; x++ )
{
- nBitsLeft = 0;
- for ( long x = 0; x < nWidth; x++ )
+ if ( --nBitsLeft < 0 )
{
- if ( --nBitsLeft < 0 )
+ while ( bIsValid && ( nBitsLeft != 7 ) )
{
- while ( bIsValid && ( nBitsLeft != 7 ) )
+ rStream.ReadChar( nByte );
+ switch ( nByte )
{
- rStream.ReadChar( nByte );
- switch ( nByte )
+ case 0x0a :
+ if ( --nScanLines < 0 )
+ bIsValid = false;
+ case 0x09 :
+ case 0x0d :
+ case 0x20 :
+ case 0x25 :
+ break;
+ default:
{
- case 0x0a :
- if ( --nScanLines < 0 )
- bIsValid = false;
- case 0x09 :
- case 0x0d :
- case 0x20 :
- case 0x25 :
- break;
- default:
+ if ( nByte >= '0' )
{
- if ( nByte >= '0' )
+ if ( nByte > '9' )
{
- if ( nByte > '9' )
- {
- nByte &=~0x20; // case none sensitive for hexadecimal values
- nByte -= ( 'A' - 10 );
- if ( nByte > 15 )
- bIsValid = false;
- }
- else
- nByte -= '0';
- nBitsLeft += 4;
- nDat <<= 4;
- nDat |= ( nByte ^ 0xf ); // in epsi a zero bit represents white color
+ nByte &=~0x20; // case none sensitive for hexadecimal values
+ nByte -= ( 'A' - 10 );
+ if ( nByte > 15 )
+ bIsValid = false;
}
else
- bIsValid = false;
+ nByte -= '0';
+ nBitsLeft += 4;
+ nDat <<= 4;
+ nDat |= ( nByte ^ 0xf ); // in epsi a zero bit represents white color
}
- break;
+ else
+ bIsValid = false;
}
+ break;
}
}
- if ( nBitDepth == 1 )
- pAcc->SetPixelIndex( y, x, static_cast<sal_uInt8>(nDat >> nBitsLeft) & 1 );
- else
- {
- pAcc->SetPixelIndex( y, x, nDat ? 1 : 0 ); // nBitDepth == 8
- nBitsLeft = 0;
- }
}
- }
- if ( bIsValid )
- {
- VirtualDevice aVDev;
- GDIMetaFile aMtf;
- Size aSize;
- aVDev.EnableOutput( false );
- aMtf.Record( &aVDev );
- aSize = aBitmap.GetPrefSize();
- if( !aSize.Width() || !aSize.Height() )
- aSize = Application::GetDefaultDevice()->PixelToLogic( aBitmap.GetSizePixel(), MAP_100TH_MM );
+ if ( nBitDepth == 1 )
+ pAcc->SetPixelIndex( y, x, static_cast<sal_uInt8>(nDat >> nBitsLeft) & 1 );
else
- aSize = OutputDevice::LogicToLogic( aSize, aBitmap.GetPrefMapMode(), MAP_100TH_MM );
- aVDev.DrawBitmap( Point(), aSize, aBitmap );
- aMtf.Stop();
- aMtf.WindStart();
- aMtf.SetPrefMapMode( MAP_100TH_MM );
- aMtf.SetPrefSize( aSize );
- aGraphic = aMtf;
- bHasPreview = bRetValue = true;
+ {
+ pAcc->SetPixelIndex( y, x, nDat ? 1 : 0 ); // nBitDepth == 8
+ nBitsLeft = 0;
+ }
}
- aBitmap.ReleaseAccess( pAcc );
}
+ if ( bIsValid )
+ {
+ VirtualDevice aVDev;
+ GDIMetaFile aMtf;
+ Size aSize;
+ aVDev.EnableOutput( false );
+ aMtf.Record( &aVDev );
+ aSize = aBitmap.GetPrefSize();
+ if( !aSize.Width() || !aSize.Height() )
+ aSize = Application::GetDefaultDevice()->PixelToLogic( aBitmap.GetSizePixel(), MAP_100TH_MM );
+ else
+ aSize = OutputDevice::LogicToLogic( aSize, aBitmap.GetPrefMapMode(), MAP_100TH_MM );
+ aVDev.DrawBitmap( Point(), aSize, aBitmap );
+ aMtf.Stop();
+ aMtf.WindStart();
+ aMtf.SetPrefMapMode( MAP_100TH_MM );
+ aMtf.SetPrefSize( aSize );
+ aGraphic = aMtf;
+ bHasPreview = bRetValue = true;
+ }
+ aBitmap.ReleaseAccess( pAcc );
}
}
}
+ }
- sal_uInt8* pDest = ImplSearchEntry( pBuf, (sal_uInt8*)"%%BoundingBox:", nBytesRead, 14 );
- if ( pDest )
+ sal_uInt8* pDest = ImplSearchEntry( pBuf, (sal_uInt8*)"%%BoundingBox:", nBytesRead, 14 );
+ if ( pDest )
+ {
+ nSecurityCount = 100;
+ long nNumb[4];
+ nNumb[0] = nNumb[1] = nNumb[2] = nNumb[3] = 0;
+ pDest += 14;
+ for ( int i = 0; ( i < 4 ) && nSecurityCount; i++ )
{
- nSecurityCount = 100;
- long nNumb[4];
- nNumb[0] = nNumb[1] = nNumb[2] = nNumb[3] = 0;
- pDest += 14;
- for ( int i = 0; ( i < 4 ) && nSecurityCount; i++ )
- {
- nNumb[ i ] = ImplGetNumber( &pDest, nSecurityCount );
- }
- if ( nSecurityCount)
- {
- bGraphicLinkCreated = true;
- GfxLink aGfxLink( pBuf, nPSSize, GFX_LINK_TYPE_EPS_BUFFER, true ) ;
- GDIMetaFile aMtf;
-
- long nWidth = nNumb[2] - nNumb[0] + 1;
- long nHeight = nNumb[3] - nNumb[1] + 1;
+ nNumb[ i ] = ImplGetNumber( &pDest, nSecurityCount );
+ }
+ if ( nSecurityCount)
+ {
+ bGraphicLinkCreated = true;
+ GfxLink aGfxLink( pBuf, nPSSize, GFX_LINK_TYPE_EPS_BUFFER, true ) ;
+ GDIMetaFile aMtf;
- // if there is no preview -> try with gs to make one
- if( !bHasPreview )
- {
- bHasPreview = RenderAsEMF(pBuf, nBytesRead, aGraphic);
- if (!bHasPreview)
- bHasPreview = RenderAsBMP(pBuf, nBytesRead, aGraphic);
- }
+ long nWidth = nNumb[2] - nNumb[0] + 1;
+ long nHeight = nNumb[3] - nNumb[1] + 1;
- // if there is no preview -> make a red box
- if( !bHasPreview )
- {
- MakePreview(pBuf, nBytesRead, nWidth, nHeight,
- aGraphic);
- }
+ // if there is no preview -> try with gs to make one
+ if( !bHasPreview )
+ {
+ bHasPreview = RenderAsEMF(pBuf, nBytesRead, aGraphic);
+ if (!bHasPreview)
+ bHasPreview = RenderAsBMP(pBuf, nBytesRead, aGraphic);
+ }
- aMtf.AddAction( (MetaAction*)( new MetaEPSAction( Point(), Size( nWidth, nHeight ),
- aGfxLink, aGraphic.GetGDIMetaFile() ) ) );
- CreateMtfReplacementAction( aMtf, rStream, nOrigPos, nPSSize, nPosWMF, nSizeWMF, nPosTIFF, nSizeTIFF );
- aMtf.WindStart();
- aMtf.SetPrefMapMode( MAP_POINT );
- aMtf.SetPrefSize( Size( nWidth, nHeight ) );
- rGraphic = aMtf;
- bRetValue = true;
+ // if there is no preview -> make a red box
+ if( !bHasPreview )
+ {
+ MakePreview(pBuf, nBytesRead, nWidth, nHeight,
+ aGraphic);
}
+
+ aMtf.AddAction( (MetaAction*)( new MetaEPSAction( Point(), Size( nWidth, nHeight ),
+ aGfxLink, aGraphic.GetGDIMetaFile() ) ) );
+ CreateMtfReplacementAction( aMtf, rStream, nOrigPos, nPSSize, nPosWMF, nSizeWMF, nPosTIFF, nSizeTIFF );
+ aMtf.WindStart();
+ aMtf.SetPrefMapMode( MAP_POINT );
+ aMtf.SetPrefSize( Size( nWidth, nHeight ) );
+ rGraphic = aMtf;
+ bRetValue = true;
}
}
}
+
if ( !bGraphicLinkCreated )
delete[] pBuf;
}
More information about the Libreoffice-commits
mailing list