From 17e399701b9e03f0304c70b08b7aa9f2333dac6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Mon, 18 Feb 2019 17:12:54 +0100 Subject: iconv: Allow _gnutls_utf8_to_ucs2 to output little endian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hugo Beauzée-Luyssen --- lib/str-iconv.c | 5 ++--- lib/system.h | 2 +- lib/x509/pkcs12_encr.c | 2 +- tests/conv-utf8.c | 6 +++--- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/str-iconv.c b/lib/str-iconv.c index f5e3943e21..9606613e48 100644 --- a/lib/str-iconv.c +++ b/lib/str-iconv.c @@ -117,9 +117,8 @@ int _gnutls_ucs2_to_utf8(const void *data, size_t size, return ret; } -/* This is big-endian output only */ int _gnutls_utf8_to_ucs2(const void *data, size_t size, - gnutls_datum_t * output) + gnutls_datum_t * output, unsigned be) { int ret; size_t dstlen, nrm_size = 0, tmp_size = 0; @@ -150,7 +149,7 @@ int _gnutls_utf8_to_ucs2(const void *data, size_t size, } /* convert to BE */ - change_u16_endianness(dst, (uint8_t*)tmp_dst, dstlen, 1); + change_u16_endianness(dst, (uint8_t*)tmp_dst, dstlen, be); dst[dstlen] = 0; dst[dstlen+1] = 0; diff --git a/lib/system.h b/lib/system.h index 2e77322e1d..ccae6475f8 100644 --- a/lib/system.h +++ b/lib/system.h @@ -100,7 +100,7 @@ int _gnutls_find_config_path(char *path, size_t max_size); int _gnutls_ucs2_to_utf8(const void *data, size_t size, gnutls_datum_t * output, unsigned bigendian); int _gnutls_utf8_to_ucs2(const void *data, size_t size, - gnutls_datum_t * output); + gnutls_datum_t * output, unsigned be); void _gnutls_global_set_gettime_function(gnutls_gettime_func gettime_func); diff --git a/lib/x509/pkcs12_encr.c b/lib/x509/pkcs12_encr.c index 9d9c1d64a9..76fbb4e8ab 100644 --- a/lib/x509/pkcs12_encr.c +++ b/lib/x509/pkcs12_encr.c @@ -96,7 +96,7 @@ _gnutls_pkcs12_string_to_key(const mac_entry_st * me, return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); ucs2.size = 2; } else { - rc = _gnutls_utf8_to_ucs2(pw, pwlen, &ucs2); + rc = _gnutls_utf8_to_ucs2(pw, pwlen, &ucs2, 1); if (rc < 0) return gnutls_assert_val(rc); diff --git a/tests/conv-utf8.c b/tests/conv-utf8.c index 73f4ff3abd..9d630e73d0 100644 --- a/tests/conv-utf8.c +++ b/tests/conv-utf8.c @@ -35,7 +35,7 @@ #include int _gnutls_utf8_to_ucs2(const void *data, size_t size, - gnutls_datum_t * output); + gnutls_datum_t * output, unsigned be); int _gnutls_ucs2_to_utf8(const void *data, size_t size, gnutls_datum_t * output, unsigned be); @@ -60,7 +60,7 @@ static void PRINT(const char *str, unsigned char *val, unsigned int size) static void fname(void **glob_state) \ { \ gnutls_datum_t out; \ - int ret = _gnutls_utf8_to_ucs2(utf8, strlen(utf8), &out); \ + int ret = _gnutls_utf8_to_ucs2(utf8, strlen(utf8), &out, 1); \ assert_int_equal(ret, 0); \ if (out.size != sizeof(utf16)-1 || memcmp(utf16, out.data, out.size) != 0) { PRINT("got: ", out.data, out.size); \ PRINT("expected: ", (unsigned char*)utf16, sizeof(utf16)-1); } \ @@ -86,7 +86,7 @@ static void fname(void **glob_state) \ static void fname(void **glob_state) \ { \ gnutls_datum_t out; \ - int ret = _gnutls_utf8_to_ucs2(utf8, utf8_size, &out); \ + int ret = _gnutls_utf8_to_ucs2(utf8, utf8_size, &out, 1); \ assert_int_not_equal(ret, 0); \ } -- cgit v1.2.1