diff options
author | 2016-02-25 12:20:40 -0800 | |
---|---|---|
committer | 2016-02-25 12:20:40 -0800 | |
commit | 64a3c95e93f863a220b56e1264553ca518e5a0e9 (patch) | |
tree | 6ecc382ac0644f52123e7037ce70ff510e4a775c /src/ports/SkFontHost_FreeType.cpp | |
parent | e37514d0b540a25471fe12ba6412dc4c8b9f9c88 (diff) |
Check scalar to fixed conversions with axes.
In SkTypeface_FreeType::Scanner::computeAxisValues, check for
out-of-range values before converting to SkFixed.
BUG=skia:4632
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1709403003
Review URL: https://codereview.chromium.org/1709403003
Diffstat (limited to 'src/ports/SkFontHost_FreeType.cpp')
-rw-r--r-- | src/ports/SkFontHost_FreeType.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index d61a94323a..181116a15e 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -1750,13 +1750,14 @@ bool SkTypeface_FreeType::Scanner::scanFont( { for (int i = 0; i < axisDefinitions.count(); ++i) { const Scanner::AxisDefinition& axisDefinition = axisDefinitions[i]; + const SkScalar axisMin = SkFixedToScalar(axisDefinition.fMinimum); + const SkScalar axisMax = SkFixedToScalar(axisDefinition.fMaximum); axisValues[i] = axisDefinition.fDefault; for (int j = 0; j < requestedAxisCount; ++j) { const SkFontMgr::FontParameters::Axis& axisSpecified = requestedAxes[j]; if (axisDefinition.fTag == axisSpecified.fTag) { - SkFixed axisValue = SkScalarToFixed(axisSpecified.fStyleValue); - axisValues[i] = SkTPin(axisValue, axisDefinition.fMinimum, axisDefinition.fMaximum); - if (axisValues[i] != axisValue) { + const SkScalar axisValue = SkTPin(axisSpecified.fStyleValue, axisMin, axisMax); + if (axisSpecified.fStyleValue != axisValue) { SkDEBUGF(("Requested font axis value out of range: " "%s '%c%c%c%c' %f; pinned to %f.\n", name.c_str(), @@ -1765,8 +1766,9 @@ bool SkTypeface_FreeType::Scanner::scanFont( (axisDefinition.fTag >> 8) & 0xFF, (axisDefinition.fTag ) & 0xFF, SkScalarToDouble(axisSpecified.fStyleValue), - SkFixedToDouble(axisValues[i]))); + SkScalarToDouble(axisValue))); } + axisValues[i] = SkScalarToFixed(axisValue); break; } } |