From: Richard Levitte Date: Tue, 26 Jan 2021 05:48:11 +0000 (+0100) Subject: Fix OSSL_PARAM_allocate_from_text() for EBCDIC X-Git-Tag: openssl-3.0.0-alpha11~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eeb09f1bd7754e85e832853f46a726c761c93df1;p=thirdparty%2Fopenssl.git Fix OSSL_PARAM_allocate_from_text() for EBCDIC OSSL_PARAM_allocate_from_text() converted text values to UTF-8 OSSL_PARAMs with a simple strncpy(). However, if the text is EBCDIC, that won't become UTF-8. Therefore, it's made to convert from EBCDIC to ASCII on platforms where the native character encoding is the former. One might argue that the conversion should be the responsibility of the application. However, this is a helper function, and the calling application can't easily know what sort of OSSL_PARAM the input values are going to be used for. Reviewed-by: Matt Caswell Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/13961) --- diff --git a/crypto/params_from_text.c b/crypto/params_from_text.c index d458d31b2ea..24d96108d04 100644 --- a/crypto/params_from_text.c +++ b/crypto/params_from_text.c @@ -9,6 +9,7 @@ */ #include +#include #include #include @@ -139,7 +140,11 @@ static int construct_from_text(OSSL_PARAM *to, const OSSL_PARAM *paramdef, } break; case OSSL_PARAM_UTF8_STRING: +#ifdef CHARSET_EBCDIC + ebcdic2ascii(buf, value, buf_n); +#else strncpy(buf, value, buf_n); +#endif break; case OSSL_PARAM_OCTET_STRING: if (ishex) { diff --git a/doc/man3/OSSL_PARAM_allocate_from_text.pod b/doc/man3/OSSL_PARAM_allocate_from_text.pod index 011685c8c82..6522e3b135b 100644 --- a/doc/man3/OSSL_PARAM_allocate_from_text.pod +++ b/doc/man3/OSSL_PARAM_allocate_from_text.pod @@ -73,8 +73,10 @@ considers that an error. If I started with "hex", OSSL_PARAM_allocate_from_text() considers that an error. -Otherwise, I is considered a C string and is copied with no -further checks to the I<< to->data >> storage. +Otherwise, I is considered a C string and is copied to the +I<< to->data >> storage. +On systems where the native character encoding is EBCDIC, the bytes in +I<< to->data >> are converted to ASCII. =item B