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:
Marcin Wojdyr 2020-02-03 20:17:03 +01:00
parent 0224a44a10
commit 3366d1e797
2 changed files with 2 additions and 1 deletions

View File

@ -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;

View File

@ -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);