Read number of polylines as UInt32 according to documentation
Change-Id: I7ef8c66485044e2543dc8d9a9e589537eb36f70f
Reviewed-on: https://gerrit.libreoffice.org/36025
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx
index 0d8a9b0..7508926 100644
--- a/vcl/source/filter/wmf/enhwmf.cxx
+++ b/vcl/source/filter/wmf/enhwmf.cxx
@@ -541,27 +541,27 @@ template <class T>
void EnhWMFReader::ReadAndDrawPolyLine()
{
sal_uInt32 nPoints;
sal_Int32 i, nPoly(0), nGesPoints(0);
pWMF->SeekRel( 0x10 );
// Number of Polygons:
pWMF->ReadInt32( nPoly ).ReadInt32( nGesPoints );
sal_uInt32 i, nNumberOfPolylines( 0 ), nCount( 0 );
pWMF->SeekRel( 0x10 ); // TODO Skipping Bounds. A 128-bit WMF RectL object (specifies the bounding rectangle in device units.)
pWMF->ReadUInt32( nNumberOfPolylines );
pWMF->ReadUInt32( nCount ); // total number of points in all polylines
// taking the amount of points of each polygon, retrieving the total number of points
if ( pWMF->good() &&
( static_cast< sal_uInt32 >(nPoly) < SAL_MAX_UINT32 / sizeof(sal_uInt16) ) &&
( static_cast< sal_uInt32 >( nPoly ) * sizeof(sal_uInt16) ) <= ( nEndPos - pWMF->Tell() )
( nNumberOfPolylines < SAL_MAX_UINT32 / sizeof( sal_uInt16 ) ) &&
( nNumberOfPolylines * sizeof( sal_uInt16 ) ) <= ( nEndPos - pWMF->Tell() )
)
{
std::unique_ptr<sal_uInt16[]> pnPoints(new sal_uInt16[ nPoly ]);
for ( i = 0; i < nPoly && pWMF->good(); i++ )
std::unique_ptr< sal_uInt32[] > pnPolylinePointCount( new sal_uInt32[ nNumberOfPolylines ] );
for ( i = 0; i < nNumberOfPolylines && pWMF->good(); i++ )
{
pWMF->ReadUInt32( nPoints );
pnPoints[ i ] = (sal_uInt16)nPoints;
pnPolylinePointCount[ i ] = nPoints;
}
// Get polygon points:
for ( i = 0; ( i < nPoly ) && pWMF->good(); i++ )
// Get polyline points:
for ( i = 0; ( i < nNumberOfPolylines ) && pWMF->good(); i++ )
{
tools::Polygon aPolygon = ReadPolygon<T>(0, pnPoints[i]);
tools::Polygon aPolygon = ReadPolygon< T >( 0, pnPolylinePointCount[ i ] );
pOut->DrawPolyLine( aPolygon, false, bRecordPath );
}
}