diff options
author | Jakub Adamek <adamek.kuba@gmail.com> | 2011-08-14 15:16:25 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-12-04 22:22:02 +0100 |
commit | f264b1c744396b4b723f34f699526592a519edb1 (patch) | |
tree | 544f9c076f6c98319df0115e2187a340048e208d /unit/test-gobex-header.c | |
parent | cb6fe44ba125817a58f41d44018734a0377a873e (diff) | |
download | bluez-f264b1c744396b4b723f34f699526592a519edb1.tar.gz |
gobex: Fix encoding of empty unicode headers
According to IrOBEX:
"An empty Name header is defined as a Name header of length 3 (one byte
opcode + two byte length)."
The current code encodes an empty header with 5 bytes, including two
bytes of null-terminator.
This patch assumes that this definition of emptiness applies to all
unicode headers, not just the name header.
Diffstat (limited to 'unit/test-gobex-header.c')
-rw-r--r-- | unit/test-gobex-header.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/unit/test-gobex-header.c b/unit/test-gobex-header.c index f67b3a860..93da949ee 100644 --- a/unit/test-gobex-header.c +++ b/unit/test-gobex-header.c @@ -27,6 +27,7 @@ #include "util.h" static uint8_t hdr_connid[] = { G_OBEX_HDR_CONNECTION, 1, 2, 3, 4 }; +static uint8_t hdr_name_empty[] = { G_OBEX_HDR_NAME, 0x00, 0x03 }; static uint8_t hdr_name_ascii[] = { G_OBEX_HDR_NAME, 0x00, 0x0b, 0x00, 'f', 0x00, 'o', 0x00, 'o', 0x00, 0x00 }; @@ -46,6 +47,23 @@ static uint8_t hdr_bytes_nval_short[] = { G_OBEX_HDR_BODY, 0xab, 0xcd, 0x01, 0x02, 0x03 }; static uint8_t hdr_bytes_nval_data[] = { G_OBEX_HDR_BODY, 0xab }; +static void test_header_name_empty(void) +{ + GObexHeader *header; + uint8_t buf[1024]; + size_t len; + + header = g_obex_header_new_unicode(G_OBEX_HDR_NAME, ""); + + g_assert(header != NULL); + + len = g_obex_header_encode(header, buf, sizeof(buf)); + + assert_memequal(hdr_name_empty, sizeof(hdr_name_empty), buf, len); + + g_obex_header_free(header); +} + static void test_header_name_ascii(void) { GObexHeader *header; @@ -194,6 +212,22 @@ static void test_header_encode_name_umlaut(void) g_obex_header_free(header); } +static void test_header_encode_name_empty(void) +{ + GObexHeader *header; + const char *str; + gboolean ret; + + header = parse_and_encode(hdr_name_empty, sizeof(hdr_name_empty)); + + ret = g_obex_header_get_unicode(header, &str); + + g_assert(ret == TRUE); + g_assert_cmpstr(str, ==, ""); + + g_obex_header_free(header); +} + static void test_header_encode_body(void) { GObexHeader *header; @@ -258,6 +292,21 @@ static void test_decode_header_name_ascii(void) g_obex_header_free(header); } +static void test_decode_header_name_empty(void) +{ + GObexHeader *header; + size_t parsed; + GError *err = NULL; + + header = g_obex_header_decode(hdr_name_empty, sizeof(hdr_name_empty), + G_OBEX_DATA_REF, &parsed, &err); + g_assert_no_error(err); + + g_assert_cmpuint(parsed, ==, sizeof(hdr_name_empty)); + + g_obex_header_free(header); +} + static void test_decode_header_name_umlaut(void) { GObexHeader *header; @@ -412,6 +461,8 @@ int main(int argc, char *argv[]) g_test_add_func("/gobex/test_decode_header_connid", test_decode_header_connid); + g_test_add_func("/gobex/test_decode_header_name_empty", + test_decode_header_name_empty); g_test_add_func("/gobex/test_decode_header_name_ascii", test_decode_header_name_ascii); g_test_add_func("/gobex/test_decode_header_name_umlaut", @@ -438,6 +489,8 @@ int main(int argc, char *argv[]) g_test_add_func("/gobex/test_header_encode_connid", test_header_encode_connid); + g_test_add_func("/gobex/test_header_encode_name_empty", + test_header_encode_name_empty); g_test_add_func("/gobex/test_header_encode_name_ascii", test_header_encode_name_ascii); g_test_add_func("/gobex/test_header_encode_name_umlaut", @@ -447,6 +500,8 @@ int main(int argc, char *argv[]) g_test_add_func("/gobex/test_header_encode_connid", test_header_encode_actionid); + g_test_add_func("/gobex/test_header_name_empty", + test_header_name_empty); g_test_add_func("/gobex/test_header_name_ascii", test_header_name_ascii); g_test_add_func("/gobex/test_header_name_umlaut", |