All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dbus: More complete buffer size check in dbus_message_from_blob
@ 2016-03-19  6:00 Andrew Zaborowski
  2016-03-19  6:00 ` [PATCH] dbus: Replace copy_params/size_params with macros Andrew Zaborowski
                   ` (8 more replies)
  0 siblings, 9 replies; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 798 bytes --]

---
 ell/dbus-message.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/ell/dbus-message.c b/ell/dbus-message.c
index 84d42d4..f9e13e2 100644
--- a/ell/dbus-message.c
+++ b/ell/dbus-message.c
@@ -643,9 +643,14 @@ struct l_dbus_message *dbus_message_from_blob(const void *data, size_t size)
 
 	message->header_size = align_len(DBUS_HEADER_SIZE +
 						hdr->field_length, 8);
-	message->header = l_malloc(message->header_size);
-
 	message->body_size = hdr->body_length;
+
+	if (message->header_size + message->body_size < size) {
+		l_free(message);
+		return NULL;
+	}
+
+	message->header = l_malloc(message->header_size);
 	message->body = l_malloc(message->body_size);
 
 	memcpy(message->header, data, message->header_size);
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH] dbus: Replace copy_params/size_params with macros.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 16:42   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH] unit: Add int64_t casts in dbus tests failing on i386 Andrew Zaborowski
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 4756 bytes --]

Passing va_list to functions this way doesn't work on i386 gcc, va_list
seems to be a simple pointer as recommended by stdarg(3).  Passing a
pointer to va_list seems to fix this, but stdarg(3) also says:

   If ap is passed to a function that uses va_arg(ap,type), then the value
   of ap is undefined after the return of that function.

so it's better to just use a macro.
---
 ell/dbus-service.c | 98 ++++++++++++++++++++++--------------------------------
 1 file changed, 40 insertions(+), 58 deletions(-)

diff --git a/ell/dbus-service.c b/ell/dbus-service.c
index c1ed9ec..e11a6d0 100644
--- a/ell/dbus-service.c
+++ b/ell/dbus-service.c
@@ -259,39 +259,34 @@ void _dbus_interface_introspection(struct l_dbus_interface *interface,
 	l_string_append(buf, "\t</interface>\n");
 }
 
-static char *copy_params(char *dest, const char *signature, va_list args)
-{
-	const char *pname;
-	const char *sig;
-
-	for (sig = signature; *sig; sig++) {
-		sig = _dbus_signature_end(sig);
-		if (!sig)
-			return NULL;
-
-		pname = va_arg(args, const char *);
-		dest = stpcpy(dest, pname) + 1;
-	}
-
-	return dest;
-}
-
-static bool size_params(const char *signature, va_list args, unsigned int *len)
-{
-	const char *pname;
-	const char *sig;
-
-	for (sig = signature; *sig; sig++) {
-		sig = _dbus_signature_end(sig);
-		if (!sig)
-			return false;
-
-		pname = va_arg(args, const char *);
-		*len += strlen(pname) + 1;
-	}
-
-	return true;
-}
+#define COPY_PARAMS(dest, signature, args)	\
+	do {	\
+		const char *pname;	\
+		const char *sig;	\
+		dest = stpcpy(dest, signature) + 1;	\
+		for (sig = signature; *sig; sig++) {	\
+			sig = _dbus_signature_end(sig);	\
+			pname = va_arg(args, const char *);	\
+			dest = stpcpy(dest, pname) + 1;	\
+		}	\
+	} while(0)
+
+#define SIZE_PARAMS(signature, args)	\
+	({	\
+		unsigned int len = strlen(signature) + 1;	\
+		const char *pname;	\
+		const char *sig;	\
+		for (sig = signature; *sig; sig++) {	\
+			sig = _dbus_signature_end(sig);	\
+			if (!sig) {	\
+				len = 0;	\
+				break;	\
+			}	\
+			pname = va_arg(args, const char *);	\
+			len += strlen(pname) + 1;	\
+		}	\
+		len;	\
+	})
 
 LIB_EXPORT bool l_dbus_interface_method(struct l_dbus_interface *interface,
 					const char *name, uint32_t flags,
@@ -318,19 +313,16 @@ LIB_EXPORT bool l_dbus_interface_method(struct l_dbus_interface *interface,
 		return false;
 
 	/* Pre-calculate the needed meta-info length */
-	return_info_len = strlen(return_sig) + 1;
-	param_info_len = strlen(param_sig) + 1;
-
 	va_start(args, param_sig);
 
-	if (!size_params(return_sig, args, &return_info_len))
-		goto error;
-
-	if (!size_params(param_sig, args, &param_info_len))
-		goto error;
+	return_info_len = SIZE_PARAMS(return_sig, args);
+	param_info_len = SIZE_PARAMS(param_sig, args);
 
 	va_end(args);
 
+	if (!return_info_len || !param_info_len)
+		return false;
+
 	info = l_malloc(sizeof(*info) + return_info_len +
 					param_info_len + strlen(name) + 1);
 	info->cb = cb;
@@ -345,22 +337,16 @@ LIB_EXPORT bool l_dbus_interface_method(struct l_dbus_interface *interface,
 	 * lookups during the message dispatch procedures.
 	 */
 	p = info->metainfo + info->name_len + param_info_len + 1;
-	p = stpcpy(p, return_sig) + 1;
-	p = copy_params(p, return_sig, args);
+	COPY_PARAMS(p, return_sig, args);
 
 	p = info->metainfo + info->name_len + 1;
-	p = stpcpy(p, param_sig) + 1;
-	p = copy_params(p, param_sig, args);
+	COPY_PARAMS(p, param_sig, args);
 
 	va_end(args);
 
 	l_queue_push_tail(interface->methods, info);
 
 	return true;
-
-error:
-	va_end(args);
-	return false;
 }
 
 LIB_EXPORT bool l_dbus_interface_signal(struct l_dbus_interface *interface,
@@ -382,17 +368,14 @@ LIB_EXPORT bool l_dbus_interface_signal(struct l_dbus_interface *interface,
 		return false;
 
 	/* Pre-calculate the needed meta-info length */
-	metainfo_len = strlen(name) + 1;
-	metainfo_len += strlen(signature) + 1;
-
 	va_start(args, signature);
+	metainfo_len = SIZE_PARAMS(signature, args);
+	va_end(args);
 
-	if (!size_params(signature, args, &metainfo_len)) {
-		va_end(args);
+	if (!metainfo_len)
 		return false;
-	}
 
-	va_end(args);
+	metainfo_len += strlen(name) + 1;
 
 	info = l_malloc(sizeof(*info) + metainfo_len);
 	info->flags = flags;
@@ -401,8 +384,7 @@ LIB_EXPORT bool l_dbus_interface_signal(struct l_dbus_interface *interface,
 	p = stpcpy(info->metainfo, name) + 1;
 
 	va_start(args, signature);
-	p = stpcpy(p, signature) + 1;
-	p = copy_params(p, signature, args);
+	COPY_PARAMS(p, signature, args);
 	va_end(args);
 
 	l_queue_push_tail(interface->signals, info);
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH] unit: Add int64_t casts in dbus tests failing on i386.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
  2016-03-19  6:00 ` [PATCH] dbus: Replace copy_params/size_params with macros Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 16:44   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH] dbus: Take iter->sig_len into account in l_dbus_message_iter_get_variant Andrew Zaborowski
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 1183 bytes --]

Make sure the values are passed as 64-bit ones, adding LL would probably
also work for gcc.
---
 unit/test-dbus-message.c     | 2 +-
 unit/test-gvariant-message.c | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/unit/test-dbus-message.c b/unit/test-dbus-message.c
index 4008d2b..ce58769 100644
--- a/unit/test-dbus-message.c
+++ b/unit/test-dbus-message.c
@@ -1555,7 +1555,7 @@ static void build_basic_7(const void *data)
 {
 	struct l_dbus_message *msg = build_message(data);
 
-	l_dbus_message_set_arguments(msg, "t", 10000);
+	l_dbus_message_set_arguments(msg, "t", (uint64_t) 10000);
 
 	compare_message(msg, data);
 }
diff --git a/unit/test-gvariant-message.c b/unit/test-gvariant-message.c
index 324c341..5573e63 100644
--- a/unit/test-gvariant-message.c
+++ b/unit/test-gvariant-message.c
@@ -208,7 +208,8 @@ static void build_basic_1(const void *data)
 
 	result = l_dbus_message_set_arguments(msg, "bynqiuxtd", true, 255,
 						-32, 32, -24, 24,
-						140179142606749, 99L, 5.0);
+						(uint64_t) 140179142606749,
+						(int64_t) 99, 5.0);
 	assert(result);
 
 	_dbus_message_set_serial(msg, 1111);
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH] dbus: Take iter->sig_len into account in l_dbus_message_iter_get_variant
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
  2016-03-19  6:00 ` [PATCH] dbus: Replace copy_params/size_params with macros Andrew Zaborowski
  2016-03-19  6:00 ` [PATCH] unit: Add int64_t casts in dbus tests failing on i386 Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 16:59   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH] gvariant: Exclude container's offsets from child iterator len Andrew Zaborowski
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 588 bytes --]

---
 ell/dbus-message.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ell/dbus-message.c b/ell/dbus-message.c
index f9e13e2..30c09b9 100644
--- a/ell/dbus-message.c
+++ b/ell/dbus-message.c
@@ -1379,7 +1379,8 @@ LIB_EXPORT bool l_dbus_message_iter_get_variant(
 	if (unlikely(!iter))
 		return false;
 
-	if (!iter->sig_start || strcmp(iter->sig_start, signature))
+	if (!iter->sig_start || strlen(signature) != iter->sig_len ||
+			memcmp(iter->sig_start, signature, iter->sig_len))
 		return false;
 
 	va_start(args, signature);
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH] gvariant: Exclude container's offsets from child iterator len.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
                   ` (2 preceding siblings ...)
  2016-03-19  6:00 ` [PATCH] dbus: Take iter->sig_len into account in l_dbus_message_iter_get_variant Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 17:57   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH] gvariant: Reset container's variable_is_last for fixed-size structs Andrew Zaborowski
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 1004 bytes --]

---
 ell/gvariant-util.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/ell/gvariant-util.c b/ell/gvariant-util.c
index 1aaddc3..61e5b52 100644
--- a/ell/gvariant-util.c
+++ b/ell/gvariant-util.c
@@ -497,6 +497,7 @@ static const void *next_item(struct l_dbus_message_iter *iter,
 	bool last_member;
 	unsigned int sig_len;
 	unsigned int offset_len;
+	unsigned int len = iter->len;
 
 	memcpy(sig, iter->sig_start + iter->sig_pos,
 			iter->sig_len - iter->sig_pos);
@@ -529,7 +530,14 @@ static const void *next_item(struct l_dbus_message_iter *iter,
 	}
 
 	if (iter->container_type != DBUS_CONTAINER_TYPE_ARRAY && last_member) {
-		*out_item_size = iter->len - iter->pos;
+		offset_len = offset_length(iter->len, 0);
+		len = iter->len;
+
+		if (iter->offsets && iter->offsets + offset_len <
+				iter->data + len)
+			len = iter->offsets + offset_len - iter->data;
+
+		*out_item_size = len - iter->pos;
 		goto done;
 	}
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH] gvariant: Reset container's variable_is_last for fixed-size structs.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
                   ` (3 preceding siblings ...)
  2016-03-19  6:00 ` [PATCH] gvariant: Exclude container's offsets from child iterator len Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 18:05   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH] dbus: Fix returned body_size in _dbus1_builder_finish Andrew Zaborowski
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 787 bytes --]

We reset container->variable_is_last after basic fixed-size types but
not after structs and dicts.  This would probably produce incorrect
results for fixed-size structs that are the last element in a
variable-size struct, e.g. (s(u))
---
 ell/gvariant-util.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ell/gvariant-util.c b/ell/gvariant-util.c
index 61e5b52..4601222 100644
--- a/ell/gvariant-util.c
+++ b/ell/gvariant-util.c
@@ -994,6 +994,8 @@ static bool leave_struct_dict_common(struct dbus_builder *builder,
 	if (_gvariant_is_fixed_size(container->signature)) {
 		int alignment = _gvariant_get_alignment(container->signature);
 		grow_body(builder, 0, alignment);
+
+		parent->variable_is_last = false;
 	} else {
 		size_t offset;
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH] dbus: Fix returned body_size in _dbus1_builder_finish.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
                   ` (4 preceding siblings ...)
  2016-03-19  6:00 ` [PATCH] gvariant: Reset container's variable_is_last for fixed-size structs Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 17:02   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH 1/2] dbus: Add _gvariant_builder_mark and _rewind Andrew Zaborowski
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 539 bytes --]

Seems we missed this in the _mark and _rewind patch.
---
 ell/dbus-util.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ell/dbus-util.c b/ell/dbus-util.c
index 9d5b5af..ab0600a 100644
--- a/ell/dbus-util.c
+++ b/ell/dbus-util.c
@@ -1275,7 +1275,7 @@ char *_dbus1_builder_finish(struct dbus_builder *builder,
 	builder->signature = NULL;
 
 	*body = builder->body;
-	*body_size = builder->body_size;
+	*body_size = builder->body_pos;
 	builder->body = NULL;
 	builder->body_size = 0;
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 1/2] dbus: Add _gvariant_builder_mark and _rewind.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
                   ` (5 preceding siblings ...)
  2016-03-19  6:00 ` [PATCH] dbus: Fix returned body_size in _dbus1_builder_finish Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 18:05   ` Denis Kenzior
  2016-03-19  6:00 ` [PATCH 2/2] unit: reuse mark+rewind, complex 1 tests for gvariant-message Andrew Zaborowski
  2016-03-21 17:16 ` [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Denis Kenzior
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 6679 bytes --]

---
 ell/dbus-message.c     |  2 ++
 ell/gvariant-private.h |  2 ++
 ell/gvariant-util.c    | 78 +++++++++++++++++++++++++++++++++++++++++---------
 3 files changed, 69 insertions(+), 13 deletions(-)

diff --git a/ell/dbus-message.c b/ell/dbus-message.c
index 30c09b9..ef6a50d 100644
--- a/ell/dbus-message.c
+++ b/ell/dbus-message.c
@@ -773,6 +773,8 @@ static struct builder_driver gvariant_driver = {
 	.enter_array = _gvariant_builder_enter_array,
 	.leave_array = _gvariant_builder_leave_array,
 	.finish = _gvariant_builder_finish,
+	.mark = _gvariant_builder_mark,
+	.rewind = _gvariant_builder_rewind,
 	.new = _gvariant_builder_new,
 	.free = _gvariant_builder_free,
 };
diff --git a/ell/gvariant-private.h b/ell/gvariant-private.h
index 2a20feb..f8f1313 100644
--- a/ell/gvariant-private.h
+++ b/ell/gvariant-private.h
@@ -47,6 +47,8 @@ struct dbus_builder *_gvariant_builder_new(void *body, size_t body_size);
 void _gvariant_builder_free(struct dbus_builder *builder);
 bool _gvariant_builder_append_basic(struct dbus_builder *builder,
 					char type, const void *value);
+bool _gvariant_builder_mark(struct dbus_builder *builder);
+bool _gvariant_builder_rewind(struct dbus_builder *builder);
 char *_gvariant_builder_finish(struct dbus_builder *builder,
 				void **body, size_t *body_size);
 bool _gvariant_builder_enter_struct(struct dbus_builder *builder,
diff --git a/ell/gvariant-util.c b/ell/gvariant-util.c
index 4601222..79f1a68 100644
--- a/ell/gvariant-util.c
+++ b/ell/gvariant-util.c
@@ -753,7 +753,15 @@ struct dbus_builder {
 	struct l_string *signature;
 	void *body;
 	size_t body_size;
+	size_t body_pos;
 	struct l_queue *containers;
+	struct {
+		struct container *container;
+		int sig_end;
+		size_t body_pos;
+		size_t offset_index;
+		bool variable_is_last : 1;
+	} mark;
 };
 
 struct container {
@@ -770,18 +778,19 @@ struct container {
 static inline size_t grow_body(struct dbus_builder *builder,
 					size_t len, unsigned int alignment)
 {
-	size_t size = align_len(builder->body_size, alignment);
+	size_t size = align_len(builder->body_pos, alignment);
 
 	if (size + len > builder->body_size) {
 		builder->body = l_realloc(builder->body, size + len);
-
-		if (size - builder->body_size > 0)
-			memset(builder->body + builder->body_size, 0,
-						size - builder->body_size);
-
 		builder->body_size = size + len;
 	}
 
+	if (size - builder->body_pos > 0)
+		memset(builder->body + builder->body_pos, 0,
+			size - builder->body_pos);
+
+	builder->body_pos = size + len;
+
 	return size;
 }
 
@@ -840,7 +849,7 @@ static void container_append_struct_offsets(struct container *container,
 	if (container->offset_index == 0)
 		return;
 
-	offset_size = offset_length(builder->body_size,
+	offset_size = offset_length(builder->body_pos,
 						container->offset_index);
 	i = container->offset_index - 1;
 
@@ -863,7 +872,7 @@ static void container_append_array_offsets(struct container *container,
 	if (container->offset_index == 0)
 		return;
 
-	offset_size = offset_length(builder->body_size,
+	offset_size = offset_length(builder->body_pos,
 						container->offset_index);
 	start = grow_body(builder, offset_size * container->offset_index, 1);
 
@@ -888,6 +897,9 @@ struct dbus_builder *_gvariant_builder_new(void *body, size_t body_size)
 
 	builder->body = body;
 	builder->body_size = body_size;
+	builder->body_pos = body_size;
+
+	builder->mark.container = root;
 
 	return builder;
 }
@@ -1003,7 +1015,7 @@ static bool leave_struct_dict_common(struct dbus_builder *builder,
 			return false;
 
 		container_append_struct_offsets(container, builder);
-		offset = builder->body_size - parent->start;
+		offset = builder->body_pos - parent->start;
 		parent->offsets[parent->offset_index++] = offset;
 		parent->variable_is_last = true;
 	}
@@ -1086,7 +1098,7 @@ bool _gvariant_builder_leave_variant(struct dbus_builder *builder)
 	if (!grow_offsets(parent))
 		return false;
 
-	offset = builder->body_size - parent->start;
+	offset = builder->body_pos - parent->start;
 	parent->offsets[parent->offset_index++] = offset;
 	parent->variable_is_last = true;
 
@@ -1166,7 +1178,7 @@ bool _gvariant_builder_leave_array(struct dbus_builder *builder)
 	if (!grow_offsets(parent))
 		return false;
 
-	offset = builder->body_size - parent->start;
+	offset = builder->body_pos - parent->start;
 	parent->offsets[parent->offset_index++] = offset;
 	parent->variable_is_last = true;
 
@@ -1225,7 +1237,7 @@ bool _gvariant_builder_append_basic(struct dbus_builder *builder,
 	start = grow_body(builder, len, alignment);
 	memcpy(builder->body + start, value, len);
 
-	offset = builder->body_size - container->start;
+	offset = builder->body_pos - container->start;
 	container->offsets[container->offset_index++] = offset;
 	container->variable_is_last = true;
 
@@ -1235,6 +1247,46 @@ bool _gvariant_builder_append_basic(struct dbus_builder *builder,
 	return true;
 }
 
+bool _gvariant_builder_mark(struct dbus_builder *builder)
+{
+	struct container *container = l_queue_peek_head(builder->containers);
+
+	builder->mark.container = container;
+
+	if (l_queue_length(builder->containers) == 1)
+		builder->mark.sig_end = l_string_length(builder->signature);
+	else
+		builder->mark.sig_end = container->sigindex;
+
+	builder->mark.body_pos = builder->body_pos;
+	builder->mark.offset_index = container->offset_index;
+	builder->mark.variable_is_last = container->variable_is_last;
+
+	return true;
+}
+
+bool _gvariant_builder_rewind(struct dbus_builder *builder)
+{
+	struct container *container;
+
+	while ((container = l_queue_peek_head(builder->containers)) !=
+				builder->mark.container) {
+		container_free(container);
+		l_queue_pop_head(builder->containers);
+	}
+
+	builder->body_pos = builder->mark.body_pos;
+	container->offset_index = builder->mark.offset_index;
+	container->variable_is_last = builder->mark.variable_is_last;
+
+	if (l_queue_length(builder->containers) == 1)
+		l_string_truncate(builder->signature, builder->mark.sig_end);
+	else
+		container->sigindex = builder->mark.sig_end;
+
+	return true;
+}
+
 char *_gvariant_builder_finish(struct dbus_builder *builder,
 				void **body, size_t *body_size)
 {
@@ -1259,7 +1311,7 @@ char *_gvariant_builder_finish(struct dbus_builder *builder,
 		container_append_struct_offsets(root, builder);
 
 	*body = builder->body;
-	*body_size = builder->body_size;
+	*body_size = builder->body_pos;
 	builder->body = NULL;
 	builder->body_size = 0;
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/2] unit: reuse mark+rewind, complex 1 tests for gvariant-message.
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
                   ` (6 preceding siblings ...)
  2016-03-19  6:00 ` [PATCH 1/2] dbus: Add _gvariant_builder_mark and _rewind Andrew Zaborowski
@ 2016-03-19  6:00 ` Andrew Zaborowski
  2016-03-21 18:06   ` Denis Kenzior
  2016-03-21 17:16 ` [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Denis Kenzior
  8 siblings, 1 reply; 19+ messages in thread
From: Andrew Zaborowski @ 2016-03-19  6:00 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 7364 bytes --]

---
 unit/test-gvariant-message.c | 158 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 152 insertions(+), 6 deletions(-)

diff --git a/unit/test-gvariant-message.c b/unit/test-gvariant-message.c
index 5573e63..c2cb811 100644
--- a/unit/test-gvariant-message.c
+++ b/unit/test-gvariant-message.c
@@ -79,6 +79,40 @@ static const struct message_data message_data_basic_1 = {
 	.binary_len	= 184,
 };
 
+static const unsigned char message_binary_complex_1[] = {
+	0x6c, 0x01, 0x00, 0x02, 0x4f, 0x00, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00,
+	0x86, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x2f, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+	0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x00, 0x6f, 0x00, 0x00,
+	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x65, 0x74, 0x68,
+	0x6f, 0x64, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x2e,
+	0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65,
+	0x72, 0x66, 0x61, 0x63, 0x65, 0x00, 0x00, 0x73, 0x06, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x2e, 0x65, 0x78, 0x61, 0x6d,
+	0x70, 0x6c, 0x65, 0x00, 0x00, 0x73, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x6f, 0x61, 0x7b, 0x73, 0x76, 0x7d, 0x00, 0x00,
+	0x67, 0x1e, 0x31, 0x58, 0x6e, 0x81, 0x00, 0x00, 0x2f, 0x63, 0x6f, 0x6d,
+	0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x61, 0x6d, 0x65,
+	0x00, 0x00, 0x00, 0x00, 0x4c, 0x69, 0x6e, 0x75, 0x73, 0x20, 0x54, 0x6f,
+	0x72, 0x76, 0x61, 0x6c, 0x64, 0x73, 0x00, 0x00, 0x73, 0x05, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65,
+	0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x62, 0x0a,
+	0x1a, 0x34, 0x14,
+};
+
+static const struct message_data message_data_complex_1 = {
+	.type		= "method_call",
+	.path		= "/com/example/object",
+	.interface	= "com.example.interface",
+	.member		= "method",
+	.destination	= "com.example",
+	.signature	= "oa{sv}",
+	.binary		= message_binary_complex_1,
+	.binary_len	= sizeof(message_binary_complex_1),
+};
+
 static struct l_dbus_message *check_message(const struct message_data *msg_data)
 {
 	struct l_dbus_message *msg;
@@ -133,6 +167,17 @@ static struct l_dbus_message *check_message(const struct message_data *msg_data)
 	return msg;
 }
 
+static struct l_dbus_message *build_message(const struct message_data *msg_data)
+{
+	struct l_dbus_message *msg;
+
+	msg = _dbus_message_new_method_call(2, msg_data->destination,
+			msg_data->path, msg_data->interface, msg_data->member);
+	assert(msg);
+
+	return msg;
+}
+
 static void compare_message(struct l_dbus_message *msg,
 					const struct message_data *msg_data)
 {
@@ -198,14 +243,9 @@ static void parse_basic_1(const void *data)
 
 static void build_basic_1(const void *data)
 {
-	const struct message_data *msg_data = data;
-	struct l_dbus_message *msg;
+	struct l_dbus_message *msg = build_message(data);
 	bool result;
 
-	msg = _dbus_message_new_method_call(2, msg_data->destination,
-			msg_data->path, msg_data->interface, msg_data->member);
-	assert(msg);
-
 	result = l_dbus_message_set_arguments(msg, "bynqiuxtd", true, 255,
 						-32, 32, -24, 24,
 						(uint64_t) 140179142606749,
@@ -217,6 +257,104 @@ static void build_basic_1(const void *data)
 	compare_message(msg, data);
 }
 
+static void check_complex_1(const void *data)
+{
+	struct l_dbus_message *msg = check_message(data);
+	struct l_dbus_message_iter dict, iter;
+	const char *path, *str;
+	bool result, val;
+
+	result = l_dbus_message_get_arguments(msg, "oa{sv}", &path, &dict);
+	assert(result);
+	assert(!strcmp(path, "/com/example/object"));
+
+	result = l_dbus_message_iter_next_entry(&dict, &str, &iter);
+	assert(result);
+	assert(!strcmp(str, "Name"));
+
+	result = l_dbus_message_iter_get_variant(&iter, "s", &str);
+	assert(result);
+	assert(!strcmp(str, "Linus Torvalds"));
+
+	result = l_dbus_message_iter_next_entry(&dict, &str, &iter);
+	assert(result);
+	assert(!strcmp(str, "Developer"));
+
+	result = l_dbus_message_iter_get_variant(&iter, "b", &val);
+	assert(result);
+	assert(val);
+
+	result = l_dbus_message_iter_next_entry(&dict, &str, &iter);
+	assert(!result);
+
+	l_dbus_message_unref(msg);
+}
+
+static void build_complex_1(const void *data)
+{
+	struct l_dbus_message *msg = build_message(data);
+	bool result;
+
+	result = l_dbus_message_set_arguments(msg, "oa{sv}",
+						"/com/example/object", 2,
+						"Name", "s", "Linus Torvalds",
+						"Developer", "b", true);
+	assert(result);
+
+	_dbus_message_set_serial(msg, 1111);
+
+	compare_message(msg, data);
+}
+
+static void builder_rewind(const void *data)
+{
+	struct l_dbus_message *msg = build_message(data);
+	struct l_dbus_message_builder *builder;
+	bool b = true;
+
+	builder = l_dbus_message_builder_new(msg);
+	assert(builder);
+
+	assert(l_dbus_message_builder_append_basic(builder, 'o',
+							"/com/example/object"));
+
+	assert(l_dbus_message_builder_enter_array(builder, "{sv}"));
+
+	assert(_dbus_message_builder_mark(builder));
+
+	assert(l_dbus_message_builder_enter_dict(builder, "sv"));
+	assert(l_dbus_message_builder_append_basic(builder, 's', "Name"));
+	assert(l_dbus_message_builder_enter_variant(builder, "s"));
+	assert(l_dbus_message_builder_append_basic(builder, 's',
+							"Invalid"));
+	assert(l_dbus_message_builder_leave_variant(builder));
+	assert(l_dbus_message_builder_leave_dict(builder));
+
+	assert(_dbus_message_builder_rewind(builder));
+
+	assert(l_dbus_message_builder_enter_dict(builder, "sv"));
+	assert(l_dbus_message_builder_append_basic(builder, 's', "Name"));
+	assert(l_dbus_message_builder_enter_variant(builder, "s"));
+	assert(l_dbus_message_builder_append_basic(builder, 's',
+							"Linus Torvalds"));
+	assert(l_dbus_message_builder_leave_variant(builder));
+	assert(l_dbus_message_builder_leave_dict(builder));
+
+	assert(l_dbus_message_builder_enter_dict(builder, "sv"));
+	assert(l_dbus_message_builder_append_basic(builder, 's', "Developer"));
+	assert(l_dbus_message_builder_enter_variant(builder, "b"));
+	assert(l_dbus_message_builder_append_basic(builder, 'b', &b));
+	assert(l_dbus_message_builder_leave_variant(builder));
+	assert(l_dbus_message_builder_leave_dict(builder));
+
+	assert(l_dbus_message_builder_leave_array(builder));
+
+	assert(l_dbus_message_builder_finalize(builder));
+	l_dbus_message_builder_destroy(builder);
+
+	compare_message(msg, data);
+}
+
 int main(int argc, char *argv[])
 {
 	l_test_init(&argc, &argv);
@@ -224,5 +362,13 @@ int main(int argc, char *argv[])
 	l_test_add("Basic 1 (parse)", parse_basic_1, &message_data_basic_1);
 	l_test_add("Basic 1 (build)", build_basic_1, &message_data_basic_1);
 
+	l_test_add("Complex 1 (parse)", check_complex_1,
+						&message_data_complex_1);
+	l_test_add("Complex 1 (build)", build_complex_1,
+						&message_data_complex_1);
+
+	l_test_add("Message Builder Rewind Complex 1", builder_rewind,
+						&message_data_complex_1);
+
 	return l_test_run();
 }
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] dbus: Replace copy_params/size_params with macros.
  2016-03-19  6:00 ` [PATCH] dbus: Replace copy_params/size_params with macros Andrew Zaborowski
@ 2016-03-21 16:42   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 16:42 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 707 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> Passing va_list to functions this way doesn't work on i386 gcc, va_list
> seems to be a simple pointer as recommended by stdarg(3).  Passing a
> pointer to va_list seems to fix this, but stdarg(3) also says:
>
>     If ap is passed to a function that uses va_arg(ap,type), then the value
>     of ap is undefined after the return of that function.
>
> so it's better to just use a macro.
> ---
>   ell/dbus-service.c | 98 ++++++++++++++++++++++--------------------------------
>   1 file changed, 40 insertions(+), 58 deletions(-)

Makes sense to me.  Thanks for looking into this one.

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] unit: Add int64_t casts in dbus tests failing on i386.
  2016-03-19  6:00 ` [PATCH] unit: Add int64_t casts in dbus tests failing on i386 Andrew Zaborowski
@ 2016-03-21 16:44   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 16:44 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 351 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> Make sure the values are passed as 64-bit ones, adding LL would probably
> also work for gcc.
> ---
>   unit/test-dbus-message.c     | 2 +-
>   unit/test-gvariant-message.c | 3 ++-
>   2 files changed, 3 insertions(+), 2 deletions(-)
>

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] dbus: Take iter->sig_len into account in l_dbus_message_iter_get_variant
  2016-03-19  6:00 ` [PATCH] dbus: Take iter->sig_len into account in l_dbus_message_iter_get_variant Andrew Zaborowski
@ 2016-03-21 16:59   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 16:59 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 200 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> ---
>   ell/dbus-message.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] dbus: Fix returned body_size in _dbus1_builder_finish.
  2016-03-19  6:00 ` [PATCH] dbus: Fix returned body_size in _dbus1_builder_finish Andrew Zaborowski
@ 2016-03-21 17:02   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 17:02 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 247 bytes --]

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> Seems we missed this in the _mark and _rewind patch.

Yep!

> ---
>   ell/dbus-util.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] dbus: More complete buffer size check in dbus_message_from_blob
  2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
                   ` (7 preceding siblings ...)
  2016-03-19  6:00 ` [PATCH 2/2] unit: reuse mark+rewind, complex 1 tests for gvariant-message Andrew Zaborowski
@ 2016-03-21 17:16 ` Denis Kenzior
  8 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 17:16 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 207 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> ---
>   ell/dbus-message.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
>

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] gvariant: Exclude container's offsets from child iterator len.
  2016-03-19  6:00 ` [PATCH] gvariant: Exclude container's offsets from child iterator len Andrew Zaborowski
@ 2016-03-21 17:57   ` Denis Kenzior
  2016-03-21 22:09     ` Andrzej Zaborowski
  0 siblings, 1 reply; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 17:57 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 1368 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> ---
>   ell/gvariant-util.c | 10 +++++++++-
>   1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/ell/gvariant-util.c b/ell/gvariant-util.c
> index 1aaddc3..61e5b52 100644
> --- a/ell/gvariant-util.c
> +++ b/ell/gvariant-util.c
> @@ -497,6 +497,7 @@ static const void *next_item(struct l_dbus_message_iter *iter,
>   	bool last_member;
>   	unsigned int sig_len;
>   	unsigned int offset_len;
> +	unsigned int len = iter->len;

Looks like this belongs in the if block below.

>
>   	memcpy(sig, iter->sig_start + iter->sig_pos,
>   			iter->sig_len - iter->sig_pos);
> @@ -529,7 +530,14 @@ static const void *next_item(struct l_dbus_message_iter *iter,
>   	}
>
>   	if (iter->container_type != DBUS_CONTAINER_TYPE_ARRAY && last_member) {
> -		*out_item_size = iter->len - iter->pos;
> +		offset_len = offset_length(iter->len, 0);
> +		len = iter->len;
> +
> +		if (iter->offsets && iter->offsets + offset_len <
> +				iter->data + len)
> +			len = iter->offsets + offset_len - iter->data;
> +
> +		*out_item_size = len - iter->pos;

This looks fine to me.  I'm guessing the location of the child 
iterator's offsets was being messed up?  Hence variable length field 
sizes were incorrect.  Right?

>   		goto done;
>   	}
>
>

Regards,
-Denis

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] gvariant: Reset container's variable_is_last for fixed-size structs.
  2016-03-19  6:00 ` [PATCH] gvariant: Reset container's variable_is_last for fixed-size structs Andrew Zaborowski
@ 2016-03-21 18:05   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 18:05 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 522 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> We reset container->variable_is_last after basic fixed-size types but
> not after structs and dicts.  This would probably produce incorrect
> results for fixed-size structs that are the last element in a
> variable-size struct, e.g. (s(u))
> ---
>   ell/gvariant-util.c | 2 ++
>   1 file changed, 2 insertions(+)

I think you are correct on this one.  Can we add a quickie test for this?

I went ahead and applied the patch.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] dbus: Add _gvariant_builder_mark and _rewind.
  2016-03-19  6:00 ` [PATCH 1/2] dbus: Add _gvariant_builder_mark and _rewind Andrew Zaborowski
@ 2016-03-21 18:05   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 18:05 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 325 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> ---
>   ell/dbus-message.c     |  2 ++
>   ell/gvariant-private.h |  2 ++
>   ell/gvariant-util.c    | 78 +++++++++++++++++++++++++++++++++++++++++---------
>   3 files changed, 69 insertions(+), 13 deletions(-)

Applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/2] unit: reuse mark+rewind, complex 1 tests for gvariant-message.
  2016-03-19  6:00 ` [PATCH 2/2] unit: reuse mark+rewind, complex 1 tests for gvariant-message Andrew Zaborowski
@ 2016-03-21 18:06   ` Denis Kenzior
  0 siblings, 0 replies; 19+ messages in thread
From: Denis Kenzior @ 2016-03-21 18:06 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 319 bytes --]

Hi Andrew,

On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
> ---
>   unit/test-gvariant-message.c | 158 +++++++++++++++++++++++++++++++++++++++++--
>   1 file changed, 152 insertions(+), 6 deletions(-)
>

Applied.  Need you to resubmit the iter offsets patch for this to pass 
properly.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] gvariant: Exclude container's offsets from child iterator len.
  2016-03-21 17:57   ` Denis Kenzior
@ 2016-03-21 22:09     ` Andrzej Zaborowski
  0 siblings, 0 replies; 19+ messages in thread
From: Andrzej Zaborowski @ 2016-03-21 22:09 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 1789 bytes --]

Hi Denis,

On 21 March 2016 at 18:57, Denis Kenzior <denkenz@gmail.com> wrote:
> Hi Andrew,
>
> On 03/19/2016 01:00 AM, Andrew Zaborowski wrote:
>>
>> ---
>>   ell/gvariant-util.c | 10 +++++++++-
>>   1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/ell/gvariant-util.c b/ell/gvariant-util.c
>> index 1aaddc3..61e5b52 100644
>> --- a/ell/gvariant-util.c
>> +++ b/ell/gvariant-util.c
>> @@ -497,6 +497,7 @@ static const void *next_item(struct
>> l_dbus_message_iter *iter,
>>         bool last_member;
>>         unsigned int sig_len;
>>         unsigned int offset_len;
>> +       unsigned int len = iter->len;
>
>
> Looks like this belongs in the if block below.

True, it's also redundant.

>
>>
>>         memcpy(sig, iter->sig_start + iter->sig_pos,
>>                         iter->sig_len - iter->sig_pos);
>> @@ -529,7 +530,14 @@ static const void *next_item(struct
>> l_dbus_message_iter *iter,
>>         }
>>
>>         if (iter->container_type != DBUS_CONTAINER_TYPE_ARRAY &&
>> last_member) {
>> -               *out_item_size = iter->len - iter->pos;
>> +               offset_len = offset_length(iter->len, 0);
>> +               len = iter->len;
>> +
>> +               if (iter->offsets && iter->offsets + offset_len <
>> +                               iter->data + len)
>> +                       len = iter->offsets + offset_len - iter->data;
>> +
>> +               *out_item_size = len - iter->pos;
>
>
> This looks fine to me.  I'm guessing the location of the child iterator's
> offsets was being messed up?  Hence variable length field sizes were
> incorrect.  Right?

I think that is what was happening, in the end it would read some
child value from a completely wrong place.

Best regards

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2016-03-21 22:09 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-19  6:00 [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Andrew Zaborowski
2016-03-19  6:00 ` [PATCH] dbus: Replace copy_params/size_params with macros Andrew Zaborowski
2016-03-21 16:42   ` Denis Kenzior
2016-03-19  6:00 ` [PATCH] unit: Add int64_t casts in dbus tests failing on i386 Andrew Zaborowski
2016-03-21 16:44   ` Denis Kenzior
2016-03-19  6:00 ` [PATCH] dbus: Take iter->sig_len into account in l_dbus_message_iter_get_variant Andrew Zaborowski
2016-03-21 16:59   ` Denis Kenzior
2016-03-19  6:00 ` [PATCH] gvariant: Exclude container's offsets from child iterator len Andrew Zaborowski
2016-03-21 17:57   ` Denis Kenzior
2016-03-21 22:09     ` Andrzej Zaborowski
2016-03-19  6:00 ` [PATCH] gvariant: Reset container's variable_is_last for fixed-size structs Andrew Zaborowski
2016-03-21 18:05   ` Denis Kenzior
2016-03-19  6:00 ` [PATCH] dbus: Fix returned body_size in _dbus1_builder_finish Andrew Zaborowski
2016-03-21 17:02   ` Denis Kenzior
2016-03-19  6:00 ` [PATCH 1/2] dbus: Add _gvariant_builder_mark and _rewind Andrew Zaborowski
2016-03-21 18:05   ` Denis Kenzior
2016-03-19  6:00 ` [PATCH 2/2] unit: reuse mark+rewind, complex 1 tests for gvariant-message Andrew Zaborowski
2016-03-21 18:06   ` Denis Kenzior
2016-03-21 17:16 ` [PATCH] dbus: More complete buffer size check in dbus_message_from_blob Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.