stb_sprintf: avoid left shift of negative value
fix undefined behaviour reported by UBSan: runtime error: left shift of negative value -9223372036854775808 and add a test case. fixes #800
This commit is contained in:
parent
0224a44a10
commit
3366d1e797
@ -1696,7 +1696,7 @@ static stbsp__int32 stbsp__real_to_str(char const **start, stbsp__uint32 *len, c
|
||||
|
||||
if (expo == 0) // is zero or denormal
|
||||
{
|
||||
if ((bits << 1) == 0) // do zero
|
||||
if (((stbsp__uint64) bits << 1) == 0) // do zero
|
||||
{
|
||||
*decimal_pos = 1;
|
||||
*start = out;
|
||||
|
@ -85,6 +85,7 @@ int main()
|
||||
CHECK2("0.00", "%.2f", 1e-4);
|
||||
CHECK2("-5.20", "%+4.2f", -5.2);
|
||||
CHECK2("0.0 ", "%-10.1f", 0.);
|
||||
CHECK2("-0.000000", "%f", -0.);
|
||||
CHECK2("0.000001", "%f", 9.09834e-07);
|
||||
#if USE_STB // rounding differences
|
||||
CHECK2("38685626227668133600000000.0", "%.1f", pow_2_85);
|
||||
|
Loading…
Reference in New Issue
Block a user