Fix false positives of IS_*() macros for 8-bit ASCII characters
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Mon, 2 Apr 2018 20:37:30 +0000 (22:37 +0200)
committerDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Sun, 8 Apr 2018 18:12:01 +0000 (20:12 +0200)
commita9b7a06ed8e6d70bf7caa778838d7a869a17db78
treeebaae9f9aad41256b1b3719a3dc41eaa73dfd641
parent5283e19f11f06d26bc92c6351cbb61324ffb3dfc
Fix false positives of IS_*() macros for 8-bit ASCII characters

Fixes #5778, #5840

The various IS_*() macros did not work correctly for 8-bit ASCII
characters with the high bit set, because the CVT(a) preprocessor
macro and'ed the given ASCII value with 0x7F, effectively folding
the high value range 128-255 over the low value range 0-127.
As a consequence, some of the IS_*() erroneously returned TRUE.

This commit fixes the issue by adding range checks instead of
cutting off high order bits using a mask. In order avoid multiple
evaluation of macro arguments, most of the implementation was moved
from macros into a static function is_keytype().

Thanks to Румен Петров for reporting and analyzing the UTF-8 parsing
issue #5840.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5903)
crypto/conf/conf_def.c
crypto/conf/conf_def.h
crypto/conf/keysets.pl