From: Nick Bowler Date: Sat, 19 May 2012 20:14:53 +0000 (-0400) Subject: uobject: Improve error handling in property decoding. X-Git-Url: http://git.draconx.ca/gitweb/upkg.git/commitdiff_plain/e404a2b5e81aa989c541023f08702e254236f98a uobject: Improve error handling in property decoding. Verify that the encoded size is actually correct, and use the proper logging method to report errors. --- diff --git a/src/uobject/uobject.c b/src/uobject/uobject.c index 74734dd..a082690 100644 --- a/src/uobject/uobject.c +++ b/src/uobject/uobject.c @@ -314,20 +314,22 @@ static unsigned long deserialize_property(UObject *uo, struct prop_head *head) case PROPERTY_END: break; case PROPERTY_BYTE: - if (priv->nbuf-len < 1) + if (head->size != 1 || priv->nbuf-len < head->size) return 0; g_value_init(&val, G_TYPE_UCHAR); g_value_set_uchar(&val, priv->buf[len]); g_object_set_property(G_OBJECT(uo), head->prop_name, &val); break; case PROPERTY_INTEGER: - if (priv->nbuf-len < 4) + if (head->size != 4 || priv->nbuf-len < head->size) return 0; g_value_init(&val, G_TYPE_ULONG); g_value_set_ulong(&val, unpack_32_le(priv->buf+len)); g_object_set_property(G_OBJECT(uo), head->prop_name, &val); break; case PROPERTY_BOOLEAN: + if (head->size != 0) + return 0; g_value_init(&val, G_TYPE_BOOLEAN); g_value_set_boolean(&val, head->tag_msb); g_object_set_property(G_OBJECT(uo), head->prop_name, &val); @@ -339,8 +341,8 @@ static unsigned long deserialize_property(UObject *uo, struct prop_head *head) g_object_set_property(G_OBJECT(uo), head->prop_name, &val); break; default: - fprintf(stderr, "Unhandled property type %x\n", - (unsigned)head->type); + u_warn(uo, "%s: unsupported property type %u", + head->prop_name, (unsigned)head->type); } len += head->size;