提交 eeb09f1b 编写于 作者: R Richard Levitte

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: NMatt Caswell <matt@openssl.org>
Reviewed-by: NPaul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13961)
上级 0c3eb279
......@@ -9,6 +9,7 @@
*/
#include <string.h>
#include <openssl/ebcdic.h>
#include <openssl/err.h>
#include <openssl/params.h>
......@@ -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) {
......
......@@ -73,8 +73,10 @@ considers that an error.
If I<key> started with "hex", OSSL_PARAM_allocate_from_text()
considers that an error.
Otherwise, I<value> is considered a C string and is copied with no
further checks to the I<< to->data >> storage.
Otherwise, I<value> 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<OSSL_PARAM_OCTET_STRING>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册