1 Index: sgl/SkEdge.cpp 2 =================================================================== 3 --- sgl/SkEdge.cpp (revision 42965) 4 +++ sgl/SkEdge.cpp (working copy) 5 @@ -17,6 +17,7 @@ 6 7 #include "SkEdge.h" 8 #include "SkFDot6.h" 9 +#include <limits> 10 11 /* 12 In setLine, setQuadratic, setCubic, the first thing we do is to convert 13 @@ -76,8 +77,23 @@ 14 15 fX = SkFDot6ToFixed(x0 + SkFixedMul(slope, (32 - y0) & 63)); // + SK_Fixed1/2 16 fDX = slope; 17 - fFirstY = SkToS16(top); 18 - fLastY = SkToS16(bot - 1); 19 + fFirstY = (int16_t)(top); // inlined skToS16() 20 + if (top != (long)fFirstY) { 21 + if (fFirstY < top) { 22 + fFirstY = std::numeric_limits<int16_t>::max(); 23 + } else { 24 + fFirstY = std::numeric_limits<int16_t>::min(); 25 + } 26 + fX -= fDX * (top - (long)fFirstY); 27 + } 28 + fLastY = (int16_t)(bot - 1); // inlined SkToS16() 29 + if (bot-1 != (long)fLastY) { 30 + if (fLastY < bot-1) { 31 + fLastY = std::numeric_limits<int16_t>::max(); 32 + } else { 33 + fLastY = std::numeric_limits<int16_t>::min(); 34 + } 35 + } 36 fCurveCount = 0; 37 fWinding = SkToS8(winding); 38 fCurveShift = 0; 39