summaryrefslogtreecommitdiff
path: root/gobex/gobex-header.c
diff options
context:
space:
mode:
authorJakub Adamek <adamek.kuba@gmail.com>2011-08-14 15:16:25 +0200
committerMarcel Holtmann <marcel@holtmann.org>2012-12-04 22:22:02 +0100
commitf264b1c744396b4b723f34f699526592a519edb1 (patch)
tree544f9c076f6c98319df0115e2187a340048e208d /gobex/gobex-header.c
parentcb6fe44ba125817a58f41d44018734a0377a873e (diff)
downloadbluez-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.c11
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;