Ticket #145 (closed defect: fixed)

Opened 3 years ago

Last modified 3 years ago

SMS PDU decode fails when sender number is empty

Reported by: hadara@… Owned by: daniel
Priority: major Milestone: milestone4
Component: framework/ogsmd Version:
Keywords: Cc:

Description

When you have SMS messages with empty sender address the bcd_decode() function will fail since it expects string to be at least 1 char long. Here's a patch to fix it:

--- framework/subsystems/ogsmd/gsm_orig/convert.py      Thu Sep 18 09:25:04 2008
+++ framework/subsystems/ogsmd/gsm/convert.py   Thu Sep 18 10:12:18 2008
@@ -68,10 +68,12 @@
 #=========================================================================#
 def bcd_decode(bs):
 #=========================================================================#
-  s = "".join(["%1x%1x" % (b & 0xF, b >> 4) for b in bs])
-  if s[-1] == "f":
-    s = s[:-1]
-  return s
+    if bs == []:
+        return ''
+    s = "".join(["%1x%1x" % (b & 0xF, b >> 4) for b in bs])
+    if s[-1] == "f":
+        s = s[:-1]
+    return s

 #=========================================================================#
 def bcd_encode(number):

Here's a backtrace of the exception:

ogsmd    ERROR    unhandled exception in response callback: string index out of range                                                                                              Traceback (most recent call last):                                                                                                                                                   File "/usr/lib/python2.5/site-packages/framework/subsystems/ogsmd/gsm/channel.py", line 379, in handleResponseToRequest                                                              ok_cb( reqstring.strip(), response )                                                                                                                                             File "/usr/lib/python2.5/site-packages/framework/subsystems/ogsmd/gsm/decor.py", line 45, in logIt                                                                                   result = fn( *args, **kwargs )                                                                                                                                                   File "/usr/lib/python2.5/site-packages/framework/subsystems/ogsmd/modems/abstract/mediator.py", line 688, in responseFromChannel
    sms = ogsmd.gsm.sms.decodeSMS( line, dir)
  File "/usr/lib/python2.5/site-packages/framework/subsystems/ogsmd/gsm/sms.py", line 67, in decodeSMS
    sms.oa = PDUAddress( *decodePDUNumber( bytes[offset:offset+oa_len] ) )
  File "/usr/lib/python2.5/site-packages/framework/subsystems/ogsmd/gsm/convert.py", line 52, in decodePDUNumber
    number = bcd_decode(number)
  File "/usr/lib/python2.5/site-packages/framework/subsystems/ogsmd/gsm/convert.py", line 72, in bcd_decode
    if s[-1] == "f":
IndexError: string index out of range

and here's the offending SMS: 069173529009000400802400102101121030005BD4729A5D06A1CBECF49C1E9E8360361A4C76CBE158A0753D4D0695D320F59EEEAE9341F472985CA683D66F7719FE9ED3D32E50F65D07A1C3F632485C2EBB41E3309B5D2683C47910CC4683C96E399C0B

Change History

comment:1 Changed 3 years ago by daniel

  • Owner changed from mickey to daniel

comment:2 Changed 3 years ago by daniel

  • Status changed from new to closed
  • Resolution set to fixed

Thanks for the patch! It's applied in [5c1cfd6b58f70ecf7e393b3fe280668ebe3c9ff7]

Note: See TracTickets for help on using tickets.