poppler/GfxState.cc | 21 --------------------- poppler/Parser.cc | 3 ++- poppler/SplashOutputDev.cc | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 22 deletions(-)
New commits: commit 3b6e3605209d5db453725b9ce4e6e54679d9c5da Author: Albert Astals Cid <[email protected]> Date: Sun Dec 27 15:30:22 2009 +0100 Do not crop the transformation matrix at an arbitrary value Fixes bug 25763 and gave no regression on my test suite diff --git a/poppler/GfxState.cc b/poppler/GfxState.cc index 0dc02b4..36eeaaf 100644 --- a/poppler/GfxState.cc +++ b/poppler/GfxState.cc @@ -4780,23 +4780,12 @@ void GfxState::getFontTransMat(double *m11, double *m12, void GfxState::setCTM(double a, double b, double c, double d, double e, double f) { - int i; - ctm[0] = a; ctm[1] = b; ctm[2] = c; ctm[3] = d; ctm[4] = e; ctm[5] = f; - - // avoid FP exceptions on badly messed up PDF files - for (i = 0; i < 6; ++i) { - if (ctm[i] > 1e10) { - ctm[i] = 1e10; - } else if (ctm[i] < -1e10) { - ctm[i] = -1e10; - } - } } void GfxState::concatCTM(double a, double b, double c, @@ -4805,7 +4794,6 @@ void GfxState::concatCTM(double a, double b, double c, double b1 = ctm[1]; double c1 = ctm[2]; double d1 = ctm[3]; - int i; ctm[0] = a * a1 + b * c1; ctm[1] = a * b1 + b * d1; @@ -4813,15 +4801,6 @@ void GfxState::concatCTM(double a, double b, double c, ctm[3] = c * b1 + d * d1; ctm[4] = e * a1 + f * c1 + ctm[4]; ctm[5] = e * b1 + f * d1 + ctm[5]; - - // avoid FP exceptions on badly messed up PDF files - for (i = 0; i < 6; ++i) { - if (ctm[i] > 1e10) { - ctm[i] = 1e10; - } else if (ctm[i] < -1e10) { - ctm[i] = -1e10; - } - } } void GfxState::shiftCTM(double tx, double ty) { diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc index 4d51a42..a26cd09 100644 --- a/poppler/SplashOutputDev.cc +++ b/poppler/SplashOutputDev.cc @@ -1983,6 +1983,9 @@ void SplashOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, } ctm = state->getCTM(); + for (int i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) return; + } mat[0] = ctm[0]; mat[1] = ctm[1]; mat[2] = -ctm[2]; @@ -2261,6 +2264,9 @@ void SplashOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int n, i; ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) return; + } mat[0] = ctm[0]; mat[1] = ctm[1]; mat[2] = -ctm[2]; @@ -2528,6 +2534,12 @@ void SplashOutputDev::drawMaskedImage(GfxState *state, Object *ref, //----- draw the source image ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) { + delete maskBitmap; + return; + } + } mat[0] = ctm[0]; mat[1] = ctm[1]; mat[2] = -ctm[2]; @@ -2639,6 +2651,9 @@ void SplashOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, int n, i; ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) return; + } mat[0] = ctm[0]; mat[1] = ctm[1]; mat[2] = -ctm[2]; commit ea44c60645001ffea7d297f8549aaa4f5ce5e16c Author: Ilya Gorenbein <[email protected]> Date: Sun Dec 27 15:27:00 2009 +0100 Try to work on streams without Length We have code that finds the Length if it's wrong so let that code do its job instead of returning a NULL stream diff --git a/poppler/Parser.cc b/poppler/Parser.cc index 05fba86..5f8e15d 100644 --- a/poppler/Parser.cc +++ b/poppler/Parser.cc @@ -15,6 +15,7 @@ // // Copyright (C) 2006, 2009 Albert Astals Cid <[email protected]> // Copyright (C) 2006 Krzysztof Kowalczyk <[email protected]> +// Copyright (C) 2009 Ilya Gorenbein <[email protected]> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -179,7 +180,7 @@ Stream *Parser::makeStream(Object *dict, Guchar *fileKey, } else { error(getPos(), "Bad 'Length' attribute in stream"); obj.free(); - return NULL; + length = 0; } // check for length in damaged file _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
