summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fitz/base_geometry.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/fitz/base_geometry.c b/fitz/base_geometry.c
index e8d9032f..fc5ce517 100644
--- a/fitz/base_geometry.c
+++ b/fitz/base_geometry.c
@@ -97,15 +97,20 @@ fz_translate(float tx, float ty)
fz_matrix
fz_invert_matrix(fz_matrix src)
{
- fz_matrix dst;
- float rdet = 1 / (src.a * src.d - src.b * src.c);
- dst.a = src.d * rdet;
- dst.b = -src.b * rdet;
- dst.c = -src.c * rdet;
- dst.d = src.a * rdet;
- dst.e = -src.e * dst.a - src.f * dst.c;
- dst.f = -src.e * dst.b - src.f * dst.d;
- return dst;
+ float det = src.a * src.d - src.b * src.c;
+ if (det < -FLT_EPSILON || det > FLT_EPSILON)
+ {
+ fz_matrix dst;
+ float rdet = 1 / det;
+ dst.a = src.d * rdet;
+ dst.b = -src.b * rdet;
+ dst.c = -src.c * rdet;
+ dst.d = src.a * rdet;
+ dst.e = -src.e * dst.a - src.f * dst.c;
+ dst.f = -src.e * dst.b - src.f * dst.d;
+ return dst;
+ }
+ return src;
}
int