2012-03-16 22:53:09

by Elvis Pfutzenreuter

[permalink] [raw]
Subject: [PATCH] Fix crash when HDP first reliable channel is nil

Congruent to health_channel_destroy(), the "/" path is returned by MainChannel
property of HealthDevice when the first reliable channel is nil.

An empty path provokes the following error:

process xxxs: arguments to dbus_message_iter_append_basic() were incorrect,
assertion "_dbus_check_is_valid_path (*string_p)" failed in file
../../dbus/dbus-message.c line 2539. This is normally a bug in some
application using the D-Bus library.
---
health/hdp.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/health/hdp.c b/health/hdp.c
index 812352f..eba438a 100644
--- a/health/hdp.c
+++ b/health/hdp.c
@@ -2077,7 +2077,7 @@ static DBusMessage *device_get_properties(DBusConnection *conn,
if (device->fr != NULL)
path = g_strdup(device->fr->path);
else
- path = g_strdup("");
+ path = g_strdup("/");
dict_append_entry(&dict, "MainChannel", DBUS_TYPE_OBJECT_PATH, &path);
g_free(path);
dbus_message_iter_close_container(&iter, &dict);
--
1.7.5.4



2012-03-27 12:18:21

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] Fix crash when HDP first reliable channel is nil

Hi Elvis,

On Tue, Mar 27, 2012, Elvis Pfutzenreuter wrote:
> On Mar 27, 2012, at 8:36 AM, Johan Hedberg wrote:
>
> > Hi Elvis,
> >
> > On Fri, Mar 16, 2012, Elvis Pf?tzenreuter wrote:
> >> Congruent to health_channel_destroy(), the "/" path is returned by MainChannel
> >> property of HealthDevice when the first reliable channel is nil.
> >>
> >> An empty path provokes the following error:
> >>
> >> process xxxs: arguments to dbus_message_iter_append_basic() were incorrect,
> >> assertion "_dbus_check_is_valid_path (*string_p)" failed in file
> >> ../../dbus/dbus-message.c line 2539. This is normally a bug in some
> >> application using the D-Bus library.
> >> ---
> >> health/hdp.c | 2 +-
> >> 1 files changed, 1 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/health/hdp.c b/health/hdp.c
> >> index 812352f..eba438a 100644
> >> --- a/health/hdp.c
> >> +++ b/health/hdp.c
> >> @@ -2077,7 +2077,7 @@ static DBusMessage *device_get_properties(DBusConnection *conn,
> >> if (device->fr != NULL)
> >> path = g_strdup(device->fr->path);
> >> else
> >> - path = g_strdup("");
> >> + path = g_strdup("/");
> >> dict_append_entry(&dict, "MainChannel", DBUS_TYPE_OBJECT_PATH, &path);
> >> g_free(path);
> >> dbus_message_iter_close_container(&iter, &dict);
> >
> > Would it maybe make more sense to simply not include this property in
> > the property list if device->fr is NULL? (after all, there's nothing
> > interesting to be found at "/" from a HDP perspective)
> >
>
> Could be, but when fr is deleted, a PropertyChanged signal is emitted for
> MainChannel. Is there some way to signal that a property has been removed?

Instead of sending a PropertyChanged wouldn't the ChannelDeleted signal
be good enough? (the client then just needs to compare it with the
currently known MainChannel value.

Johan

2012-03-27 11:59:53

by Elvis Pfutzenreuter

[permalink] [raw]
Subject: Re: [PATCH] Fix crash when HDP first reliable channel is nil

On Mar 27, 2012, at 8:36 AM, Johan Hedberg wrote:

> Hi Elvis,
>
> On Fri, Mar 16, 2012, Elvis Pf?tzenreuter wrote:
>> Congruent to health_channel_destroy(), the "/" path is returned by MainChannel
>> property of HealthDevice when the first reliable channel is nil.
>>
>> An empty path provokes the following error:
>>
>> process xxxs: arguments to dbus_message_iter_append_basic() were incorrect,
>> assertion "_dbus_check_is_valid_path (*string_p)" failed in file
>> ../../dbus/dbus-message.c line 2539. This is normally a bug in some
>> application using the D-Bus library.
>> ---
>> health/hdp.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/health/hdp.c b/health/hdp.c
>> index 812352f..eba438a 100644
>> --- a/health/hdp.c
>> +++ b/health/hdp.c
>> @@ -2077,7 +2077,7 @@ static DBusMessage *device_get_properties(DBusConnection *conn,
>> if (device->fr != NULL)
>> path = g_strdup(device->fr->path);
>> else
>> - path = g_strdup("");
>> + path = g_strdup("/");
>> dict_append_entry(&dict, "MainChannel", DBUS_TYPE_OBJECT_PATH, &path);
>> g_free(path);
>> dbus_message_iter_close_container(&iter, &dict);
>
> Would it maybe make more sense to simply not include this property in
> the property list if device->fr is NULL? (after all, there's nothing
> interesting to be found at "/" from a HDP perspective)
>

Could be, but when fr is deleted, a PropertyChanged signal is emitted for
MainChannel. Is there some way to signal that a property has been removed?

2012-03-27 11:36:51

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] Fix crash when HDP first reliable channel is nil

Hi Elvis,

On Fri, Mar 16, 2012, Elvis Pf?tzenreuter wrote:
> Congruent to health_channel_destroy(), the "/" path is returned by MainChannel
> property of HealthDevice when the first reliable channel is nil.
>
> An empty path provokes the following error:
>
> process xxxs: arguments to dbus_message_iter_append_basic() were incorrect,
> assertion "_dbus_check_is_valid_path (*string_p)" failed in file
> ../../dbus/dbus-message.c line 2539. This is normally a bug in some
> application using the D-Bus library.
> ---
> health/hdp.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/health/hdp.c b/health/hdp.c
> index 812352f..eba438a 100644
> --- a/health/hdp.c
> +++ b/health/hdp.c
> @@ -2077,7 +2077,7 @@ static DBusMessage *device_get_properties(DBusConnection *conn,
> if (device->fr != NULL)
> path = g_strdup(device->fr->path);
> else
> - path = g_strdup("");
> + path = g_strdup("/");
> dict_append_entry(&dict, "MainChannel", DBUS_TYPE_OBJECT_PATH, &path);
> g_free(path);
> dbus_message_iter_close_container(&iter, &dict);

Would it maybe make more sense to simply not include this property in
the property list if device->fr is NULL? (after all, there's nothing
interesting to be found at "/" from a HDP perspective)

Johan