You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2012/08/14 10:59:38 UTC

svn commit: r1372787 - in /incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf: svt_enhwmf.cxx svt_winwmf.cxx

Author: alg
Date: Tue Aug 14 08:59:38 2012
New Revision: 1372787

URL: http://svn.apache.org/viewvc?rev=1372787&view=rev
Log:
Added adaption of binfilter for securing polygon creations

Modified:
    incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_enhwmf.cxx
    incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_winwmf.cxx

Modified: incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_enhwmf.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_enhwmf.cxx?rev=1372787&r1=1372786&r2=1372787&view=diff
==============================================================================
--- incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_enhwmf.cxx (original)
+++ incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_enhwmf.cxx Tue Aug 14 08:59:38 2012
@@ -381,18 +381,26 @@ BOOL EnhWMFReader::ReadEnhWMF()
 						*pWMF >> nPoints;
 						pnPoints[ i ] = (UINT16)nPoints;
 					}
-					// Polygonpunkte holen:
-					pPtAry  = (Point*) new char[ nGesPoints * sizeof(Point) ];
-	
-					for ( i = 0; i < nGesPoints; i++ )
-					{
-						*pWMF >> nX32 >> nY32;
-						pPtAry[ i ] = Point( nX32, nY32 );
-					}
-					// PolyPolygon Actions erzeugen
-					PolyPolygon aPolyPoly( (UINT16)nPoly, pnPoints, pPtAry );
+
+					PolyPolygon aPolyPoly((UINT16)nPoly, (UINT16)nPoly);
+                    
+                    for ( i = 0; i < nPoly; i++ )
+					{
+                        const sal_uInt16 nPointCount(pnPoints[i]);
+    					pPtAry = new Point[nPointCount];
+
+                        for(sal_uInt16 j(0); j < nPointCount; j++)
+                        {
+						    *pWMF >> nX32 >> nY32;
+						    pPtAry[j] = Point( nX32, nY32 );
+                        }
+
+                        aPolyPoly.Insert(Polygon(nPointCount, pPtAry));
+                        delete[] pPtAry;
+                    }
+
+                    // PolyPolygon Actions erzeugen
 					pOut->DrawPolyPolygon( aPolyPoly, bRecordPath );
-					delete[] (char*) pPtAry;
 					delete[] pnPoints;
 				}
 			}
@@ -1116,18 +1124,26 @@ BOOL EnhWMFReader::ReadEnhWMF()
 						*pWMF >> nPoints;
 						pnPoints[ i ] = (UINT16)nPoints;
 					}
-					// Polygonpunkte holen:
-					pPtAry  = (Point*) new char[ nGesPoints * sizeof(Point) ];
-					for ( i = 0; i < nGesPoints; i++ )
+					
+					PolyPolygon aPolyPoly((UINT16)nPoly, (UINT16)nPoly);
+
+                    for ( i = 0; i < nPoly; i++ )
 					{
-						*pWMF >> nX16 >> nY16;
-						pPtAry[ i ] = Point( nX16, nY16 );
-					}
+                        const sal_uInt16 nPointCount(pnPoints[i]);
+			            pPtAry = new Point[nPointCount];
+
+                        for(sal_uInt16 j(0); j < nPointCount; j++)
+                        {
+						    *pWMF >> nX16 >> nY16;
+						    pPtAry[j] = Point( nX16, nY16 );
+                        }
+                
+                        aPolyPoly.Insert(Polygon(nPointCount, pPtAry));
+                        delete[] pPtAry;
+                    }
 	
 					// PolyPolygon Actions erzeugen
-					PolyPolygon aPolyPoly( (UINT16)nPoly, pnPoints, pPtAry );
 					pOut->DrawPolyPolygon( aPolyPoly, bRecordPath );
-					delete[] (char*) pPtAry;
 					delete[] pnPoints;
 				}
 			}

Modified: incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_winwmf.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_winwmf.cxx?rev=1372787&r1=1372786&r2=1372787&view=diff
==============================================================================
--- incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_winwmf.cxx (original)
+++ incubator/ooo/trunk/main/binfilter/bf_svtools/source/filter.vcl/wmf/svt_winwmf.cxx Tue Aug 14 08:59:38 2012
@@ -346,14 +346,25 @@ void WMFReader::ReadRecordParams( USHORT
 				*pWMF >> pnPoints[i];
 				nPoints = nPoints + pnPoints[i];
 			}
-			// Polygonpunkte holen:
-			pPtAry  = (Point*) new char[ nPoints * sizeof(Point) ];
-			for ( i = 0; i < nPoints; i++ )
-				pPtAry[ i ] = ReadPoint();
+
+			PolyPolygon aPolyPoly(nPoly, nPoly);
+
+            for( i = 0; i < nPoly; i++ )
+			{
+                const sal_uInt16 nPointCount(pnPoints[i]);
+			    pPtAry = new Point[nPointCount];
+
+                for(sal_uInt16 j(0); j < nPointCount; j++)
+                {
+    				pPtAry[j] = ReadPoint();
+                }
+                
+                aPolyPoly.Insert(Polygon(nPointCount, pPtAry));
+                delete[] pPtAry;
+            }
+
 			// PolyPolygon Actions erzeugen
-			PolyPolygon aPolyPoly( nPoly, pnPoints, pPtAry );
 			pOut->DrawPolyPolygon( aPolyPoly );
-			delete[] (char*) pPtAry;
 			delete[] pnPoints;
 		}
 		break;