Ticket #145 (closed defect: fixed)
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: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.
