在函数SplashXPath::SplashXPath()中的这段代码
参考:
http://lists.freedesktop.org/archives/poppler/2007-April/002562.html
”http://catalogueshopper.com.au/CatalogueFiles/CAT246.pdf“ 第40或者第41页。
参考:
http://lists.freedesktop.org/archives/poppler/2007-April/002562.html
pts = (SplashXPathPoint *)gmallocn(path->length, sizeof(SplashXPathPoint));....
for (i = 0; i < path->hintsLength; ++i) {
hint = &path->hints[i];
+ if (hint->ctrl0 + 1 >= path->length || hint->ctrl1 + 1 >= path->length) {
+ gfree(adjusts);
+ adjusts = NULL;
+ break;
+ }
x0 = pts[hint->ctrl0 ].x; y0 = pts[hint->ctrl0 ].y;
x1 = pts[hint->ctrl0 + 1].x; y1 = pts[hint->ctrl0 + 1].y;
x2 = pts[hint->ctrl1 ].x; y2 = pts[hint->ctrl1 ].y;
x3 = pts[hint->ctrl1 + 1].x; y3 = pts[hint->ctrl1 + 1].y;
如果没有打上行首以加号标示的补丁,如果hint->ctrl1+1>=path->length,xpdf会崩溃,我碰到的一个pdf文件就有这样的问题。”http://catalogueshopper.com.au/CatalogueFiles/CAT246.pdf“ 第40或者第41页。
本文分析了一个特定PDF文件导致XPDF应用崩溃的原因。指出在未打补丁的情况下,当遇到某些异常路径长度时,程序会出现问题。通过代码示例详细说明了触发崩溃的具体条件。

538

被折叠的 条评论
为什么被折叠?



