CVE:CVE-2006-5870
CNNVD:CNNVD-200612-653
OpenOffice（OOo）是美国阿帕奇（Apache）软件基金会的一款开源的办公软件套件。该套件包含文本文档、电子表格、演示文稿、绘图、数据库等。
OpenOffice在处理META_ESCAPE记录时存在截尾错误。在svtools\source\filter.vcl\wmf\winwmf.cxx文件中：
case W_META_ESCAPE :
...
sal_uInt32 i, nStringLen, nDXCount;
...
aMemoryStream >> aPt.X()
       >> aPt.Y()
       >> nStringLen;
sal_Unicode* pBuf = aString.AllocBuffer( (sal_uInt16)nStringLen );
for ( i = 0; i < nStringLen; i++ )
aMemoryStream >> pBuf[ i ];
nStringLen为sal_uInt32，被放到了sal_uInt16进行分配然后将最初的32位值用作了计数填充缓冲区，因此任何大于0xFFFF的长度都可能导致堆溢出。如果用户受骗打开了恶意的WMF文件或嵌入了该文件的文档(如Microsoft Word文档)的话，就可能导致通过覆盖函数指针或DWORD执行任意代码。 
OpenOffice在处理EMR_POLYPOLYGON和EMR_POLYPOLYGON16记录时还存在整数溢出。在svtools\source\filter.vcl\wmf\enhwmf.cxx文件中：
case EMR_POLYPOLYGON :
INT32 i, nPoly, nGesPoints;
...
*pWMF >> nPoly >> nGesPoints;
...
pPtAry  = (Point*) new char[ nGesPoints * sizeof(Point) ];
for ( i = 0; i < nGesPoints; i++ )
{
 *pWMF >> nX32 >> nY32;
  pPtAry[ i ] = Point( nX32, nY32 );
}
如果nGesPoints > (0x100000000/sizeof(Point))的话，nGesPoints * sizeof(Point)就会导致整数回绕。EMR_POLYPOLYGON16记录的情况与上述例子类似。远程攻击者可以通过诱骗用户打开恶意的WMF/EMF文件触发堆溢出，导致执行任意代码。
solution:Upgrade openoffice openoffice to a higher version than 2.0.4,and avoid the version (,2.0.4]; Upgrade sun staroffice to a higher version than 6.0,7.0,8.0,and avoid the version 6.0,7.0,8.0