diff options
author | Jakub Adamek <adamek.kuba@gmail.com> | 2011-08-14 15:16:25 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2011-08-22 11:11:21 +0300 |
commit | 0a129d6886f2a60c643caa62f37a9869814f4967 (patch) | |
tree | e7dae905b393da9bdc8c94fbcddcaec3b87c05f6 /gobex/gobex-header.c | |
parent | d0a44ccb43470a072274da83b5e68070dee0f230 (diff) | |
download | obexd-0a129d6886f2a60c643caa62f37a9869814f4967.tar.gz |
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 d4351cb..9096f44 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; |