Avoid Assertion Failure in HarfBuzzRun::characterIndexForXPosition
https://bugs.webkit.org/show_bug.cgi?id=92376
Patch by Dominik Röttsches <dominik.rottsches@intel.com> on 2012-07-30
Reviewed by Tony Chang.
.:
Added manual test to reliably reproduce assertion failure which is solved by this patch.
* ManualTests/harfbuzz-mouse-selection-crash.html: Added.
Source/WebCore:
Previously, the if condition in offsetForPosition gating the call to
characterIndexForXPosition was comparing a different value than what was actually used
as the argument to calling it. In some cases, this can lead to a minuscule difference
when comparing the two floats - enough to trigger the assertion. To resolve this,
the accuracy of the index calculation is improved by changing the types from int
to floats and rephrasing the if condition to be exactly the same as what is checked
for in the assertion.
Manual test ManualTests/harfbuzz-mouse-selection-crash.html added
which reliably reproduces the assertion failure before this change.
* platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
(WebCore::HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition): Types changed to float.
(WebCore::HarfBuzzShaper::offsetForPosition): Types changed to float, if condition rephrased.
* platform/graphics/harfbuzz/ng/HarfBuzzShaper.h:
(HarfBuzzRun):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@124111
268f45cc-cd09-0410-ab3c-
d52691b4dbfc