From: Pauli Date: Mon, 26 Jul 2021 01:53:23 +0000 (+1000) Subject: test: handle not a number (NaN) values in the param conversion test. X-Git-Tag: openssl-3.0.0-beta2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=09755337d5b907565d3b8a9ee8b33a2c60616c0a;p=thirdparty%2Fopenssl.git test: handle not a number (NaN) values in the param conversion test. Reviewed-by: Tim Hudson (Merged from https://github.com/openssl/openssl/pull/16144) --- diff --git a/test/params_conversion_test.c b/test/params_conversion_test.c index 48d01cac689..9422ef14734 100644 --- a/test/params_conversion_test.c +++ b/test/params_conversion_test.c @@ -279,8 +279,28 @@ static int param_conversion_test(const PARAM_CONVERSION *pc, int line) return 0; } } else { - if (!TEST_true(OSSL_PARAM_get_double(pc->param, &d)) - || !TEST_true(d == pc->d)) { + if (!TEST_true(OSSL_PARAM_get_double(pc->param, &d))) { + TEST_note("unable to convert to double on line %d", line); + return 0; + } + /* + * Check for not a number (NaN) without using the libm functions. + * When d is a NaN, the standard requires d == d to be false. + * It's less clear if d != d should be true even though it generally is. + * Hence we use the equality test and a not. + */ + if (!(d == d)) { + /* + * We've encountered a NaN so check it's really meant to be a NaN. + * We ignore the case where the two values are both different NaN, + * that's not resolvable without knowing the underlying format + * or using libm functions. + */ + if (!TEST_false(pc->d == pc->d)) { + TEST_note("unexpected NaN on line %d", line); + return 0; + } + } else if (!TEST_true(d == pc->d)) { TEST_note("unexpected conversion to double on line %d", line); return 0; }