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
committerJohan Hedberg <johan.hedberg@intel.com>2011-08-22 11:11:21 +0300
commit0a129d6886f2a60c643caa62f37a9869814f4967 (patch)
treee7dae905b393da9bdc8c94fbcddcaec3b87c05f6 /gobex/gobex-header.c
parentd0a44ccb43470a072274da83b5e68070dee0f230 (diff)
downloadobexd-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.c11
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;