summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/params_from_text.c5
-rw-r--r--doc/man3/OSSL_PARAM_allocate_from_text.pod6
2 files changed, 9 insertions, 2 deletions
diff --git a/crypto/params_from_text.c b/crypto/params_from_text.c
index d458d31b2e..24d96108d0 100644
--- a/crypto/params_from_text.c
+++ b/crypto/params_from_text.c
@@ -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) {
diff --git a/doc/man3/OSSL_PARAM_allocate_from_text.pod b/doc/man3/OSSL_PARAM_allocate_from_text.pod
index 011685c8c8..6522e3b135 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<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>