提交 aa2fabcb 编写于 作者: S Sean McBride

Fixed undefined left shifting of negative number

Added explicit cast to unsigned before doing the left shift.

This was caught by UBSan which reported things like:

drawing.cpp:361:22: runtime error: left shift of negative value -26214
drawing.cpp:383:22: runtime error: left shift of negative value -78642
上级 0052d46b
......@@ -358,7 +358,7 @@ LineAA( Mat& img, Point2l pt1, Point2l pt2, const void* color )
pt1.y ^= pt2.y & j;
x_step = XY_ONE;
y_step = (dy << XY_SHIFT) / (ax | 1);
y_step = (int64)((uint64_t)dy << XY_SHIFT) / (ax | 1);
pt2.x += XY_ONE;
ecount = (int)((pt2.x >> XY_SHIFT) - (pt1.x >> XY_SHIFT));
j = -(pt1.x & (XY_ONE - 1));
......@@ -380,7 +380,7 @@ LineAA( Mat& img, Point2l pt1, Point2l pt2, const void* color )
pt2.y ^= pt1.y & i;
pt1.y ^= pt2.y & i;
x_step = (dx << XY_SHIFT) / (ay | 1);
x_step = (int64)((uint64_t)dx << XY_SHIFT) / (ay | 1);
y_step = XY_ONE;
pt2.y += XY_ONE;
ecount = (int)((pt2.y >> XY_SHIFT) - (pt1.y >> XY_SHIFT));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册