diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc index 942ad1b..b15ee5f 100644 --- a/poppler/Gfx.cc +++ b/poppler/Gfx.cc @@ -2207,10 +2207,20 @@ void Gfx::doTilingPatternFill(GfxTilingPattern *tPat, //~ edge instead of left/bottom (?) xstep = fabs(tPat->getXStep()); ystep = fabs(tPat->getYStep()); - xi0 = (int)ceil((xMin - tPat->getBBox()[2]) / xstep); - xi1 = (int)floor((xMax - tPat->getBBox()[0]) / xstep) + 1; - yi0 = (int)ceil((yMin - tPat->getBBox()[3]) / ystep); - yi1 = (int)floor((yMax - tPat->getBBox()[1]) / ystep) + 1; + if (tPat->getBBox()[0] < tPat->getBBox()[2]) { + xi0 = (int)ceil((xMin - tPat->getBBox()[2]) / xstep); + xi1 = (int)floor((xMax - tPat->getBBox()[0]) / xstep) + 1; + } else { + xi0 = (int)ceil((xMin - tPat->getBBox()[0]) / xstep); + xi1 = (int)floor((xMax - tPat->getBBox()[2]) / xstep) + 1; + } + if (tPat->getBBox()[1] < tPat->getBBox()[3]) { + yi0 = (int)ceil((yMin - tPat->getBBox()[3]) / ystep); + yi1 = (int)floor((yMax - tPat->getBBox()[1]) / ystep) + 1; + } else { + yi0 = (int)ceil((yMin - tPat->getBBox()[1]) / ystep); + yi1 = (int)floor((yMax - tPat->getBBox()[3]) / ystep) + 1; + } for (i = 0; i < 4; ++i) { m1[i] = m[i]; }