* [Bluez-devel] [PATCH] Fix some bugs in hcidump.
@ 2004-02-23 3:18 James Courtier-Dutton
2004-02-23 7:42 ` Marcel Holtmann
0 siblings, 1 reply; 6+ messages in thread
From: James Courtier-Dutton @ 2004-02-23 3:18 UTC (permalink / raw)
To: bluez-devel
[-- Attachment #1: Type: text/plain, Size: 109 bytes --]
Attached is a patch to apply to bluez-hcidump-1.5/parser/sdp.c
It fixes some of the printout.
Cheers
James
[-- Attachment #2: sdp.c.diff --]
[-- Type: text/x-patch, Size: 1441 bytes --]
--- sdp.c.org 2004-02-23 02:56:03.667767736 +0000
+++ sdp.c 2004-02-23 03:15:48.787602136 +0000
@@ -324,6 +324,7 @@
printf("pat");
if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {
+ len = frm->len;
while (len - frm->len < n1 ) {
if (parse_de_hdr(frm,&n2) == SDP_DE_UUID) {
print_uuid(n2, frm);
@@ -351,7 +352,8 @@
printf("aid(s)");
if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {
- while (len - frm->len <= n1 ) {
+ len = frm->len;
+ while (len - frm->len < n1 ) {
/* Print AttributeID */
if (parse_de_hdr(frm, &n2) == SDP_DE_UINT) {
switch(n2) {
@@ -367,13 +369,13 @@
break;
}
} else {
- printf("\nERROR: Unexpected syntax\n");
+ printf("\nERROR: Unexpected syntax: (aid)\n");
raw_dump(level, frm);
}
}
printf("\n");
} else {
- printf("\nERROR: Unexpected syntax\n");
+ printf("\nERROR: Unexpected syntax: (aid)\n");
raw_dump(level, frm);
}
}
@@ -385,6 +387,7 @@
int len = frm->len;
if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {
+ len = frm->len;
while (len - frm->len < n1 ) {
/* Print AttributeID */
if ((parse_de_hdr(frm, &n2) == SDP_DE_UINT) &&
@@ -426,7 +429,7 @@
int cnt = 0;
if (parse_de_hdr(frm, &n) == SDP_DE_SEQ) {
- printf(" len 0x%x frm->len 0x%x n 0x%x\n", len, frm->len, n);
+ len = frm->len;
while (len - frm->len < n ) {
p_indent(level, 0);
printf("srv rec #%d\n", cnt++);
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [Bluez-devel] [PATCH] Fix some bugs in hcidump. 2004-02-23 3:18 [Bluez-devel] [PATCH] Fix some bugs in hcidump James Courtier-Dutton @ 2004-02-23 7:42 ` Marcel Holtmann 2004-02-23 13:41 ` James Courtier-Dutton 0 siblings, 1 reply; 6+ messages in thread From: Marcel Holtmann @ 2004-02-23 7:42 UTC (permalink / raw) To: James Courtier-Dutton; +Cc: BlueZ Mailing List Hi James, > Attached is a patch to apply to bluez-hcidump-1.5/parser/sdp.c > > It fixes some of the printout. please always do the diff againts the CVS version. > --- sdp.c.org 2004-02-23 02:56:03.667767736 +0000 > +++ sdp.c 2004-02-23 03:15:48.787602136 +0000 > @@ -324,6 +324,7 @@ > printf("pat"); > > if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) { > + len = frm->len; > while (len - frm->len < n1 ) { > if (parse_de_hdr(frm,&n2) == SDP_DE_UUID) { > print_uuid(n2, frm); Your change means this while (n1 > 0) { ... } If this is what you want then do it this way and remove unneeded variables. Give me a short description what this changes do and why you did this change. Regards Marcel ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bluez-devel] [PATCH] Fix some bugs in hcidump. 2004-02-23 7:42 ` Marcel Holtmann @ 2004-02-23 13:41 ` James Courtier-Dutton 2004-02-23 14:04 ` Marcel Holtmann 0 siblings, 1 reply; 6+ messages in thread From: James Courtier-Dutton @ 2004-02-23 13:41 UTC (permalink / raw) To: Marcel Holtmann; +Cc: BlueZ Mailing List Marcel Holtmann wrote: > Hi James, > > >>Attached is a patch to apply to bluez-hcidump-1.5/parser/sdp.c >> >>It fixes some of the printout. > > > please always do the diff againts the CVS version. > > >>--- sdp.c.org 2004-02-23 02:56:03.667767736 +0000 >>+++ sdp.c 2004-02-23 03:15:48.787602136 +0000 >>@@ -324,6 +324,7 @@ >> printf("pat"); >> >> if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) { >>+ len = frm->len; >> while (len - frm->len < n1 ) { >> if (parse_de_hdr(frm,&n2) == SDP_DE_UUID) { >> print_uuid(n2, frm); > > > Your change means this > > while (n1 > 0) { > ... > } > > If this is what you want then do it this way and remove unneeded > variables. Give me a short description what this changes do and why you > did this change. > > Regards > > Marcel > > while (len - frm->len < n1) is NOT the same as while (n1 > 0) Each call to parse_de_hdr and print_uuid changes the value of frm->len. So, each time round the while loop (len - frm->len) becomes larger. The n1 value is set by the previous line "if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {" This means we have n1 bytes of data we wish to parse inside the while loop. So, we want to start the while loop with (len - frm->len) == 0 Each time round the loop (len - frm->len) will increase( due to calls to parse_de_hdr and print_uuid) , and the loop will exit when (len - frm->len) >= n1, which is what we want. If we fail to set "len = frm->len;" just before the while loop, the previous line "if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {" changes frm->len, so the "int len = frm->len;" at the beginning of the function is no longer correct. I.E. len != frm->len after the "if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {" statement. I hope this explanation is clear. Do you want me to resubmit the patch as a "cvs -u diff" ? Cheers James ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bluez-devel] [PATCH] Fix some bugs in hcidump. 2004-02-23 13:41 ` James Courtier-Dutton @ 2004-02-23 14:04 ` Marcel Holtmann 2004-02-23 15:04 ` James Courtier-Dutton 0 siblings, 1 reply; 6+ messages in thread From: Marcel Holtmann @ 2004-02-23 14:04 UTC (permalink / raw) To: James Courtier-Dutton; +Cc: BlueZ Mailing List Hi James, > Each call to parse_de_hdr and print_uuid changes the value of frm->len. > So, each time round the while loop (len - frm->len) becomes larger. > > The n1 value is set by the previous line > "if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {" > > This means we have n1 bytes of data we wish to parse inside the while loop. > So, we want to start the while loop with (len - frm->len) == 0 > Each time round the loop (len - frm->len) will increase( due to calls to > parse_de_hdr and print_uuid) , and the loop will exit when (len - > frm->len) >= n1, which is what we want. > > If we fail to set "len = frm->len;" just before the while loop, the > previous line > "if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) {" > changes frm->len, so the "int len = frm->len;" at the beginning of the > function is no longer correct. > I.E. len != frm->len after the "if (parse_de_hdr(frm, &n1) == > SDP_DE_SEQ) {" statement. > > I hope this explanation is clear. > > Do you want me to resubmit the patch as a "cvs -u diff" ? yes. And please remove the initial assignment of len. Regards Marcel ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bluez-devel] [PATCH] Fix some bugs in hcidump. 2004-02-23 14:04 ` Marcel Holtmann @ 2004-02-23 15:04 ` James Courtier-Dutton 2004-02-23 17:39 ` Marcel Holtmann 0 siblings, 1 reply; 6+ messages in thread From: James Courtier-Dutton @ 2004-02-23 15:04 UTC (permalink / raw) To: Marcel Holtmann; +Cc: BlueZ Mailing List [-- Attachment #1: Type: text/plain, Size: 359 bytes --] Marcel Holtmann wrote: >>Do you want me to resubmit the patch as a "cvs -u diff" ? > > > yes. And please remove the initial assignment of len. > > Regards > > Marcel > > See attached patch. I have also added some extra checks so that the while loops will not go mad if there is a badly formed packet. I.E. n,n1,n2 get given bad values. Cheers James [-- Attachment #2: hcidump-fix-sdp.patch --] [-- Type: text/x-patch, Size: 2136 bytes --] Index: hcidump/parser/sdp.c =================================================================== RCS file: /cvsroot/bluez/hcidump/parser/sdp.c,v retrieving revision 1.22 diff -u -r1.22 sdp.c --- hcidump/parser/sdp.c 1 Sep 2003 15:09:06 -0000 1.22 +++ hcidump/parser/sdp.c 23 Feb 2004 14:44:00 -0000 @@ -279,7 +279,7 @@ static inline void print_des(uint8_t de_type, int level, int n, struct frame *frm, int *split) { int len = frm->len; - while (len - frm->len < n ) + while ( (len - frm->len < n) && (frm->len > 0) ) print_de(level, frm, split); } @@ -328,7 +328,7 @@ static inline void print_srv_srch_pat(int level, struct frame *frm) { - int len = frm->len; + int len; int n1; int n2; @@ -336,7 +336,8 @@ printf("pat"); if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) { - while (len - frm->len <= n1 ) { + len = frm->len; + while ( (len - frm->len < n1) && (frm->len > 0) ) { if (parse_de_hdr(frm,&n2) == SDP_DE_UUID) { print_uuid(n2, frm); } else { @@ -356,14 +357,15 @@ { uint16_t attr_id; uint32_t attr_id_range; - int len = frm->len; + int len; int n1, n2; p_indent(level, frm); printf("aid(s)"); if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) { - while (len - frm->len <= n1 ) { + len = frm->len; + while ( (len - frm->len < n1) && (frm->len > 0) ) { /* Print AttributeID */ if (parse_de_hdr(frm, &n2) == SDP_DE_UINT) { char *name; @@ -398,10 +400,11 @@ { uint16_t attr_id; int n1, n2, split; - int len = frm->len; + int len; if (parse_de_hdr(frm, &n1) == SDP_DE_SEQ) { - while (len - frm->len < n1 ) { + len = frm->len; + while ( (len - frm->len < n1) && (frm->len > 0) ) { /* Print AttributeID */ if (parse_de_hdr(frm, &n2) == SDP_DE_UINT && n2 == sizeof(attr_id)) { char *name; @@ -437,8 +440,7 @@ int cnt = 0; if (parse_de_hdr(frm, &n) == SDP_DE_SEQ) { -// printf(" len 0x%x frm->len 0x%x n 0x%x\n", len, frm->len, n); - while (len - frm->len < n ) { + while ( (len - frm->len < n) && (frm->len > 0) ) { p_indent(level, 0); printf("srv rec #%d\n", cnt++); print_attr_list(level+1, frm); ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Bluez-devel] [PATCH] Fix some bugs in hcidump. 2004-02-23 15:04 ` James Courtier-Dutton @ 2004-02-23 17:39 ` Marcel Holtmann 0 siblings, 0 replies; 6+ messages in thread From: Marcel Holtmann @ 2004-02-23 17:39 UTC (permalink / raw) To: James Courtier-Dutton; +Cc: BlueZ Mailing List Hi James, > I have also added some extra checks so that the while loops will not go > mad if there is a badly formed packet. I.E. n,n1,n2 get given bad values. patch is applied with some cosmetical changes. Regards Marcel ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2004-02-23 17:39 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-02-23 3:18 [Bluez-devel] [PATCH] Fix some bugs in hcidump James Courtier-Dutton 2004-02-23 7:42 ` Marcel Holtmann 2004-02-23 13:41 ` James Courtier-Dutton 2004-02-23 14:04 ` Marcel Holtmann 2004-02-23 15:04 ` James Courtier-Dutton 2004-02-23 17:39 ` Marcel Holtmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox