Hi Jeevaka,

2010/11/24 Jeevaka Badrappan <jeevaka.badrap...@elektrobit.com>:
> ---
>  drivers/isimodem/call-forwarding.c |   20 ++++++++++++++------
>  1 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/isimodem/call-forwarding.c 
> b/drivers/isimodem/call-forwarding.c
> index 1448451..c364bdf 100644
> --- a/drivers/isimodem/call-forwarding.c
> +++ b/drivers/isimodem/call-forwarding.c
> @@ -98,12 +98,20 @@ static gboolean decode_gsm_forwarding_info(const void 
> *restrict data,
>                        uint8_t _ton;
>                        char *_number = NULL;
>
> -                       if (!g_isi_sb_iter_get_byte(&iter, &_status, 3)
> -                               || !g_isi_sb_iter_get_byte(&iter, &_ton, 4)
> -                               || !g_isi_sb_iter_get_byte(&iter, &_norply, 5)
> -                               || !g_isi_sb_iter_get_byte(&iter, &_numlen, 7)
> -                               || !g_isi_sb_iter_get_alpha_tag(&iter, 
> &_number,
> -                                       _numlen * 2, 10))
> +                       if (status && !g_isi_sb_iter_get_byte(&iter, 
> &_status, 3))
> +                               return FALSE;
> +
> +                       if (ton && !g_isi_sb_iter_get_byte(&iter, &_ton, 4))
> +                               return FALSE;
> +
> +                       if (norply && !g_isi_sb_iter_get_byte(&iter, 
> &_norply, 5))
> +                               return FALSE;
> +
> +                       if (number && !g_isi_sb_iter_get_byte(&iter, 
> &_numlen, 7))
> +                               return FALSE;
> +
> +                       if (number && !g_isi_sb_iter_get_alpha_tag(&iter,
> +                                               &_number, _numlen * 2, 10))
>                                return FALSE;

I think the problem is that we try to decode the alpha tag even when
it is not present, i.e., when _numlen is zero.

In fact, this has already been fixed in my current working tree in a
bit different way. Mostly due to the fact that I added a new
g_isi_sb_iter_get_struct() method, which allows a little easier access
to sub-blocks like the one above.

If you're curious, here's the tree with the fix:
http://meego.gitorious.org/~akiniemi/meego-cellular/ofono-aki/commits/gisi

Thanks for the report in any case! ;)

Cheers,
Aki
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to