[poppler] poppler/Gfx.cc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sun May 3 09:35:39 UTC 2020
poppler/Gfx.cc | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
New commits:
commit 2c17c9ed7e50ea15255c905170ab1da30b62b3c6
Author: Oliver Sander <oliver.sander at tu-dresden.de>
Date: Sat May 2 16:52:09 2020 +0200
Allow almost-singular tiling pattern matrices
Issue https://gitlab.freedesktop.org/poppler/poppler/issues/894
sports a file with a diagonal tiling pattern matrices with
diagonal entries in the range of 5e-4. While entries of this
size are unusual but okay, the determinant is below the rather
arbitrary threshold of 1e-6. Therefore, poppler decided that
the matrix is singular and aborts the rendering.
Fix this by really only aborting if inverting the determinant
(which is the first thing that is being done with it) results
in a non-finite number.
As a side effect the code now also allows pattern matrices
with a negative determinant. This does not seem to appear
in the wild all that often, but I didn't find anything
in the spec that rules it out.
BUG: https://gitlab.freedesktop.org/poppler/poppler/issues/894
diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
index 9773b60c..c248c576 100644
--- a/poppler/Gfx.cc
+++ b/poppler/Gfx.cc
@@ -42,7 +42,7 @@
// Copyright (C) 2018, 2019 Adam Reichold <adam.reichold at t-online.de>
// Copyright (C) 2018 Denis Onishchenko <denis.onischenko at gmail.com>
// Copyright (C) 2019 LE GARREC Vincent <legarrec.vincent at gmail.com>
-// Copyright (C) 2019 Oliver Sander <oliver.sander at tu-dresden.de>
+// Copyright (C) 2019, 2020 Oliver Sander <oliver.sander at tu-dresden.de>
// Copyright (C) 2019 Volker Krause <vkrause at kde.org>
//
// To see a description of the changes please see the Changelog file that
@@ -2061,11 +2061,11 @@ void Gfx::doTilingPatternFill(GfxTilingPattern *tPat,
// construct a (device space) -> (pattern space) transform matrix
det = m1[0] * m1[3] - m1[1] * m1[2];
- if (fabs(det) < 0.000001) {
+ det = 1 / det;
+ if (!std::isfinite(det)) {
error(errSyntaxError, getPos(), "Singular matrix in tiling pattern fill");
return;
}
- det = 1 / det;
imb[0] = m1[3] * det;
imb[1] = -m1[1] * det;
imb[2] = -m1[2] * det;
More information about the poppler
mailing list