diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-03-18 16:50:36 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-03-18 17:10:25 +0000 |
commit | 7ceeae3823b0cf1496be1b0e191571bb463adc7f (patch) | |
tree | e6bb15af9f2e4b4c56e7f5cd529475f1724378a6 /vcl | |
parent | 1e02750ef22ff97d1819f96955be9bd25a0507b3 (diff) |
ofz: floating point exception in values close to zero
Change-Id: Idd8c7d4dd42c63f4f4a67ba61b9f3760ec04f2f1
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/svmconverter.cxx | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/vcl/source/gdi/svmconverter.cxx b/vcl/source/gdi/svmconverter.cxx index edd844df4749..a17c0cb63ddf 100644 --- a/vcl/source/gdi/svmconverter.cxx +++ b/vcl/source/gdi/svmconverter.cxx @@ -171,7 +171,21 @@ bool ImplReadMapMode(SvStream& rIStm, MapMode& rMapMode) return false; } - rMapMode = MapMode( (MapUnit) nUnit, aOrg, Fraction( nXNum, nXDenom ), Fraction( nYNum, nYDenom ) ); + Fraction aX(nXNum, nXDenom); + if (!aX.IsValid() || rtl::math::round(aX, 6) == 0.0) + { + SAL_WARN("vcl.gdi", "Parsing error: invalid mapmode fraction"); + return false; + } + + Fraction aY(nYNum, nYDenom); + if (!aY.IsValid() || rtl::math::round(aY, 6) == 0.0) + { + SAL_WARN("vcl.gdi", "Parsing error: invalid mapmode fraction"); + return false; + } + + rMapMode = MapMode((MapUnit) nUnit, aOrg, aX, aY); return true; } |