[PATCH 1/3] Fix CTLV three-byte tag parsing.
Denis Kenzior
denkenz at gmail.com
Thu Apr 22 14:58:20 PDT 2010
Hi Andrew,
> ---
> src/simutil.c | 12 ++++++------
> 1 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/simutil.c b/src/simutil.c
> index 9fb111f..822938c 100644
> --- a/src/simutil.c
> +++ b/src/simutil.c
> @@ -210,7 +210,7 @@ void comprehension_tlv_iter_init(struct
> comprehension_tlv_iter *iter, iter->data = 0;
> }
>
> -/* Comprehension TLVs defined in Section 7 of ETSI TS 102.220 */
> +/* Comprehension TLVs defined in Section 7 of ETSI TS 101.220 */
> gboolean comprehension_tlv_iter_next(struct comprehension_tlv_iter *iter)
> {
> const unsigned char *pdu = iter->pdu + iter->pos;
> @@ -230,18 +230,18 @@ gboolean comprehension_tlv_iter_next(struct
> comprehension_tlv_iter *iter) return FALSE;
>
> /*
> - * ETSI TS 102.220, Section 7.1.1.2
> + * ETSI TS 101.220, Section 7.1.1.2
> *
> * If byte 1 of the tag is equal to 0x7F, then the tag is encoded
> - * on the following two bytes, with bit 8 of the 2nd byte of the tag
> - * being the CR flag.
> + * on the following two bytes, with bit 8 of the 1st byte of the tag
> + * as the most significant bit.
Please keep the comment about the CR flag, I think that is useful.
> */
> - if (tag == 0x7F) {
> + if (tag == 0x7F && !cr) {
This isn't actually necessary. However, the statement:
if (tag == 0x00 || tag == 0xFF || tag == 0x80)
return FALSE;
Actually needs to be moved up and tag changed to *pdu.
> if ((pdu + 2) > end)
> return FALSE;
>
> cr = bit_field(pdu[0], 7, 1);
> - tag = ((pdu[0] & 0x7f) << 7) | pdu[1];
> + tag = ((pdu[0] & 0x7f) << 8) | pdu[1];
>
> if (tag < 0x0001 || tag > 0x7fff)
> return FALSE;
>
Can you resubmit the patch with these changes?
Thanks,
-Denis
More information about the ofono
mailing list