diff options
Diffstat (limited to 'graphics/gpdf/files/patch-SA18677')
-rw-r--r-- | graphics/gpdf/files/patch-SA18677 | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/graphics/gpdf/files/patch-SA18677 b/graphics/gpdf/files/patch-SA18677 new file mode 100644 index 000000000000..61ccfbae40b7 --- /dev/null +++ b/graphics/gpdf/files/patch-SA18677 @@ -0,0 +1,52 @@ +diff --exclude-from=/home/dang/.diffrc -u -ruN splash/SplashXPathScanner.cc splash/SplashXPathScanner.cc +--- splash/SplashXPathScanner.cc 2004-05-17 14:10:56.000000000 -0400 ++++ splash/SplashXPathScanner.cc 2006-02-12 14:35:09.000000000 -0500 +@@ -182,7 +182,7 @@ + } + + void SplashXPathScanner::computeIntersections(int y) { +- SplashCoord ySegMin, ySegMax, xx0, xx1; ++ SplashCoord xSegMin, xSegMax, ySegMin, ySegMax, xx0, xx1; + SplashXPathSeg *seg; + int i, j; + +@@ -232,19 +232,27 @@ + } else if (seg->flags & splashXPathVert) { + xx0 = xx1 = seg->x0; + } else { +- if (ySegMin <= y) { +- // intersection with top edge +- xx0 = seg->x0 + (y - seg->y0) * seg->dxdy; +- } else { +- // x coord of segment endpoint with min y coord +- xx0 = (seg->flags & splashXPathFlip) ? seg->x1 : seg->x0; ++ if (seg->x0 < seg->x1) { ++ xSegMin = seg->x0; ++ xSegMax = seg->x1; ++ } else { ++ xSegMin = seg->x1; ++ xSegMax = seg->x0; ++ } ++ // intersection with top edge ++ xx0 = seg->x0 + ((SplashCoord)y - seg->y0) * seg->dxdy; ++ // intersection with bottom edge ++ xx1 = seg->x0 + ((SplashCoord)y + 1 - seg->y0) * seg->dxdy; ++ // the segment may not actually extend to the top and/or bottom edges ++ if (xx0 < xSegMin) { ++ xx0 = xSegMin; ++ } else if (xx0 > xSegMax) { ++ xx0 = xSegMax; + } +- if (ySegMax >= y + 1) { +- // intersection with bottom edge +- xx1 = seg->x0 + (y + 1 - seg->y0) * seg->dxdy; +- } else { +- // x coord of segment endpoint with max y coord +- xx1 = (seg->flags & splashXPathFlip) ? seg->x0 : seg->x1; ++ if (xx1 < xSegMin) { ++ xx1 = xSegMin; ++ } else if (xx1 > xSegMax) { ++ xx1 = xSegMax; + } + } + if (xx0 < xx1) { |