- #4326, Allocate enough memory in gidx_to_string (Raúl Marín)
- #4190, Avoid undefined behaviour in gserialized_estimate (Raúl Marín)
- #4233, Fix undefined behaviour in gserialized_spgist_picksplit_nd (Raúl Marín)
+ - #4247, Avoid undefined behaviour in next_float functions (Raúl Marín)
PostGIS 2.5.0
2018/09/23
f = next_float_up(d);
d = next_float_up(f);
CU_ASSERT_DOUBLE_EQUAL(f,d, 0.0000001);
+
+ d = DBL_MAX;
+ f = next_float_up(d);
+ d = next_float_up(f);
+ CU_ASSERT_DOUBLE_EQUAL(f, d, 0.0000001);
+
+ d = DBL_MAX;
+ f = next_float_down(d);
+ d = next_float_down(f);
+ CU_ASSERT_DOUBLE_EQUAL(f, d, 0.0000001);
+
+ d = -DBL_MAX;
+ f = next_float_up(d);
+ d = next_float_up(f);
+ CU_ASSERT_DOUBLE_EQUAL(f, d, 0.0000001);
+
+ d = -DBL_MAX;
+ f = next_float_down(d);
+ d = next_float_down(f);
+ CU_ASSERT_DOUBLE_EQUAL(f, d, 0.0000001);
}
/*
inline float
next_float_down(double d)
{
- float result = d;
+ float result;
+ if (d > (double)FLT_MAX)
+ return FLT_MAX;
+ if (d <= (double)-FLT_MAX)
+ return -FLT_MAX;
+ result = d;
if ( ((double)result) <=d )
return result;
inline float
next_float_up(double d)
{
- float result = d;
+ float result;
+ if (d >= (double)FLT_MAX)
+ return FLT_MAX;
+ if (d < (double)-FLT_MAX)
+ return -FLT_MAX;
+ result = d;
if ( ((double)result) >=d )
return result;