summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Beauzée-Luyssen <hugo@beauzee.fr>2019-02-18 17:12:54 +0100
committerHugo Beauzée-Luyssen <hugo@beauzee.fr>2019-02-21 15:24:56 +0100
commit17e399701b9e03f0304c70b08b7aa9f2333dac6f (patch)
tree92a4eb3e63e480b380b4a472ff5a695bc3a605fb
parent15912b1f0f9a485948b7f34304a1b20d2182e26f (diff)
downloadgnutls-17e399701b9e03f0304c70b08b7aa9f2333dac6f.tar.gz
iconv: Allow _gnutls_utf8_to_ucs2 to output little endian
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
-rw-r--r--lib/str-iconv.c5
-rw-r--r--lib/system.h2
-rw-r--r--lib/x509/pkcs12_encr.c2
-rw-r--r--tests/conv-utf8.c6
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 <cmocka.h>
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); \
}