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 /gobex/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 'gobex/gobex-header.c')
-rw-r--r-- | gobex/gobex-header.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gobex/gobex-header.c b/gobex/gobex-header.c index d4351cb4f..9096f446a 100644 --- a/gobex/gobex-header.c +++ b/gobex/gobex-header.c @@ -157,6 +157,15 @@ GObexHeader *g_obex_header_decode(const void *data, gsize len, } ptr = get_bytes(&hdr_len, ptr, sizeof(hdr_len)); hdr_len = g_ntohs(hdr_len); + + if (hdr_len == 3) { + header->v.string = g_strdup(""); + header->vlen = 0; + header->hlen = hdr_len; + *parsed = hdr_len; + break; + } + if (hdr_len > len || hdr_len < 5) { g_set_error(err, G_OBEX_ERROR, G_OBEX_ERROR_PARSE_ERROR, @@ -331,7 +340,7 @@ GObexHeader *g_obex_header_new_unicode(guint8 id, const char *str) len = g_utf8_strlen(str, -1); header->vlen = len; - header->hlen = 3 + ((len + 1) * 2); + header->hlen = len == 0 ? 3 : 3 + ((len + 1) * 2); header->v.string = g_strdup(str); return header; |