| Index: Source/WebCore/html/HTMLCanvasElement.cpp
|
| ===================================================================
|
| --- Source/WebCore/html/HTMLCanvasElement.cpp (revision 88846)
|
| +++ Source/WebCore/html/HTMLCanvasElement.cpp (working copy)
|
| @@ -371,17 +371,21 @@
|
|
|
| IntRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect) const
|
| {
|
| - float left = floorf(logicalRect.x() * m_pageScaleFactor);
|
| - float top = floorf(logicalRect.y() * m_pageScaleFactor);
|
| - float right = ceilf(logicalRect.maxX() * m_pageScaleFactor);
|
| - float bottom = ceilf(logicalRect.maxY() * m_pageScaleFactor);
|
| -
|
| + // Prevent under/overflow by ensuring the rect's bounds stay within integer-expressible range
|
| + int left = clampToInteger(floorf(logicalRect.x() * m_pageScaleFactor));
|
| + int top = clampToInteger(floorf(logicalRect.y() * m_pageScaleFactor));
|
| + int right = clampToInteger(ceilf(logicalRect.maxX() * m_pageScaleFactor));
|
| + int bottom = clampToInteger(ceilf(logicalRect.maxY() * m_pageScaleFactor));
|
| +
|
| return IntRect(IntPoint(left, top), convertToValidDeviceSize(right - left, bottom - top));
|
| }
|
|
|
| IntSize HTMLCanvasElement::convertLogicalToDevice(const FloatSize& logicalSize) const
|
| {
|
| - return convertToValidDeviceSize(logicalSize.width() * m_pageScaleFactor, logicalSize.height() * m_pageScaleFactor);
|
| + // Prevent overflow by ensuring the rect's bounds stay within integer-expressible range
|
| + float width = clampToInteger(ceilf(logicalSize.width() * m_pageScaleFactor));
|
| + float height = clampToInteger(ceilf(logicalSize.height() * m_pageScaleFactor));
|
| + return convertToValidDeviceSize(width, height);
|
| }
|
|
|
| IntSize HTMLCanvasElement::convertToValidDeviceSize(float width, float height) const
|
|
|