All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] Fix CTLV three-byte tag parsing.
@ 2010-04-22  8:11 Andrzej Zaborowski
  2010-04-22 21:17 ` andrzej zaborowski
  2010-04-22 21:58 ` Denis Kenzior
  0 siblings, 2 replies; 5+ messages in thread
From: Andrzej Zaborowski @ 2010-04-22  8:11 UTC (permalink / raw)
  To: ofono

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

---
 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.
 	 */
-	if (tag == 0x7F) {
+	if (tag == 0x7F && !cr) {
 		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;
-- 
1.6.1


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

* [PATCH] Fix CTLV three-byte tag parsing.
  2010-04-22 21:58 ` Denis Kenzior
@ 2010-04-22  9:13   ` Andrzej Zaborowski
  2010-04-22 22:45     ` Denis Kenzior
  0 siblings, 1 reply; 5+ messages in thread
From: Andrzej Zaborowski @ 2010-04-22  9:13 UTC (permalink / raw)
  To: ofono

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

---
 src/simutil.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/simutil.c b/src/simutil.c
index 31b21c7..f994455 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;
@@ -222,15 +222,15 @@ gboolean comprehension_tlv_iter_next(struct comprehension_tlv_iter *iter)
 	if (pdu == end)
 		return FALSE;
 
+	if (*pdu == 0x00 || *pdu == 0xFF || *pdu == 0x80)
+		return FALSE;
+
 	cr = bit_field(*pdu, 7, 1);
 	tag = bit_field(*pdu, 0, 7);
 	pdu++;
 
-	if (tag == 0x00 || tag == 0xFF || tag == 0x80)
-		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
@@ -241,7 +241,7 @@ gboolean comprehension_tlv_iter_next(struct comprehension_tlv_iter *iter)
 			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;
-- 
1.6.1


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

* Re: [PATCH 1/3] Fix CTLV three-byte tag parsing.
  2010-04-22  8:11 [PATCH 1/3] Fix CTLV three-byte tag parsing Andrzej Zaborowski
@ 2010-04-22 21:17 ` andrzej zaborowski
  2010-04-22 21:58 ` Denis Kenzior
  1 sibling, 0 replies; 5+ messages in thread
From: andrzej zaborowski @ 2010-04-22 21:17 UTC (permalink / raw)
  To: ofono

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

On 22 April 2010 10:11, Andrzej Zaborowski <andrew.zaborowski@intel.com> wrote:
>         * 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.
>         */

I noticed my comment change is wrong, it should probably say "bit 8 of
the 1st byte of the tag being the CR flag" (1st referring to the first
of the last two bytes).

Best regards

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0013-Fix-CTLV-three-byte-tag-parsing.patch --]
[-- Type: text/x-patch, Size: 1541 bytes --]

From 97dd0f7de6c2b2762cfd5dd18973d56e693b8bbf Mon Sep 17 00:00:00 2001
From: Andrzej Zaborowski <andrew.zaborowski@intel.com>
Date: Thu, 22 Apr 2010 01:15:56 +0200
Subject: [PATCH 1/3] Fix CTLV three-byte tag parsing.

---
 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
+	 * being the CR flag.
 	 */
-	if (tag == 0x7F) {
+	if (tag == 0x7F && !cr) {
 		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;
-- 
1.6.1


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

* Re: [PATCH 1/3] Fix CTLV three-byte tag parsing.
  2010-04-22  8:11 [PATCH 1/3] Fix CTLV three-byte tag parsing Andrzej Zaborowski
  2010-04-22 21:17 ` andrzej zaborowski
@ 2010-04-22 21:58 ` Denis Kenzior
  2010-04-22  9:13   ` [PATCH] " Andrzej Zaborowski
  1 sibling, 1 reply; 5+ messages in thread
From: Denis Kenzior @ 2010-04-22 21:58 UTC (permalink / raw)
  To: ofono

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

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

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

* Re: [PATCH] Fix CTLV three-byte tag parsing.
  2010-04-22  9:13   ` [PATCH] " Andrzej Zaborowski
@ 2010-04-22 22:45     ` Denis Kenzior
  0 siblings, 0 replies; 5+ messages in thread
From: Denis Kenzior @ 2010-04-22 22:45 UTC (permalink / raw)
  To: ofono

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

Hi Andrew,

> ---
>  src/simutil.c |   12 ++++++------
>  1 files changed, 6 insertions(+), 6 deletions(-)
> 

Patch has been applied, thanks.

Regards,
-Denis

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

end of thread, other threads:[~2010-04-22 22:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-22  8:11 [PATCH 1/3] Fix CTLV three-byte tag parsing Andrzej Zaborowski
2010-04-22 21:17 ` andrzej zaborowski
2010-04-22 21:58 ` Denis Kenzior
2010-04-22  9:13   ` [PATCH] " Andrzej Zaborowski
2010-04-22 22:45     ` 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.