RE: smsc_at crashes on non-numeric SMS destination

"Andrija Petrovic" <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Thanks,

I'm a newbie in the open source community and (obviously) still learning the
coding etiquette.
About the tabs<->spaces matter, my coding is already done with tabs
converted to spaces, tabsize=4.
In fact, it's the cvs diff -u command that generates the tabs in the patch
file, not me...
"My" lines (with the leading +) do not contain tabs.

Perhaps the
--expand-tabs
can be useful as an extra option in
cvs diff -u
command?

Anyway, here's the patch generated with
cvs diff -u --expand-tabs,
I believe it's ok now.

Regards,
Andrija



-----Original Message-----
From: [email protected] [mailto:[email protected]]On Behalf Of
Alexander Malysh
Sent: Wednesday, May 10, 2006 1:56 PM
To: [email protected]
Subject: Re: smsc_at crashes on non-numeric SMS destination


Hi,

you patch looks good but please fix indentation...

Index: gateway/gw/smsc/smsc_at.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_at.c,v
retrieving revision 1.29
diff -u -b -B -u -r1.29 smsc_at.c
--- gateway/gw/smsc/smsc_at.c   24 Apr 2006 21:32:01 -0000      1.29
+++ gateway/gw/smsc/smsc_at.c   9 May 2006 12:03:22 -0000
@@ -2649,13 +2649,20 @@
                            );

     /* grab the digits from the MSISDN and encode as swapped semi-octets */
-    while (octstr_len(temp)) {
+    while ((out)&&(octstr_len(temp))) {

kill extra '()' and put space between checks, while (out !+ NULL && ...)

        int digit1, digit2;
        /* get the first two digit */
        digit1 = octstr_get_char(temp,0) - 48;
-       if ((digit2 = octstr_get_char(temp,1) - 48) < 0)
+        digit2 = octstr_get_char(temp,1) - '0';
+        if (digit2 < 0)
            digit2 = 0x0F;
+        if((digit1>=0)&&(digit1<16)&&(digit2<16)) {

ditto

        octstr_append_char(out, (digit2 << 4) | digit1);

if you at it, please kill tab and replace with spaces

+        }
+        else {
+            O_DESTROY(out);
+            out = NULL;
+        }
        octstr_delete(temp, 0, 2);

ditto

     }



Andrija Petrovic wrote:

> smsc_at does not check the digits of the address field in the function
> at2_format_address_field
> So, if the recipient's address contains a non-numeric string (e.g. 'Info
> Service'), and that's quite possible,
> the octstr assertion crashes the bearerbox during octstr_append_char.
>
> Added sanity check on digits before calling the octstr_append_char.
>
> cheers,
> Andrija

--
Thanks,
Alex
smsc_at.c.diff (application/octet-stream, 1.1 KB)
? gateway/gw/smsc/.smsc_at.c.swp
Index: gateway/gw/smsc/smsc_at.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_at.c,v
retrieving revision 1.29
diff -u -b -B -u -t -r1.29 smsc_at.c
--- gateway/gw/smsc/smsc_at.c	24 Apr 2006 21:32:01 -0000	1.29
+++ gateway/gw/smsc/smsc_at.c	10 May 2006 13:07:24 -0000
@@ -2649,13 +2649,20 @@
                             );
 
     /* grab the digits from the MSISDN and encode as swapped semi-octets */
-    while (octstr_len(temp)) {
+    while (out!=NULL && octstr_len(temp)>=0) {
         int digit1, digit2;
         /* get the first two digit */
         digit1 = octstr_get_char(temp,0) - 48;
-        if ((digit2 = octstr_get_char(temp,1) - 48) < 0)
+        digit2 = octstr_get_char(temp,1) - '0';
+        if (digit2 < 0)
             digit2 = 0x0F;
+        if(digit1>=0 && digit1<16 && digit2<16) {
             octstr_append_char(out, (digit2 << 4) | digit1);
+        }
+        else {
+            O_DESTROY(out);
+            out = NULL;
+        }
         octstr_delete(temp, 0, 2);
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.